Se você definir ResizeMode="CanResizeWithGrip"
um WPF Window
, uma alça de redimensionamento será mostrada no canto inferior direito, conforme abaixo:
Se você definir WindowStyle="None"
também, a barra de título desaparecerá, mas a borda chanfrada cinza permanecerá até que você defina ResizeMode="NoResize"
. Infelizmente, com essa combinação de propriedades definidas, a alça de redimensionamento também desaparece.
Substituí o Window
de ControlTemplate
por meio de um costume Style
. Eu mesmo quero especificar a borda da janela e não preciso que os usuários possam redimensionar a janela dos quatro lados, mas preciso de uma alça de redimensionamento.
Alguém pode detalhar uma maneira simples de atender a todos esses critérios?
- Não tem uma fronteira à
Window
parte daquela que me especifico em aControlTemplate
. - Tenha uma alça de redimensionamento funcional no canto inferior direito.
- Não tem uma barra de título.
.net
wpf
window
controltemplate
resizegrip
Drew Noakes
fonte
fonte
Respostas:
Se você definir a
AllowsTransparency
propriedade emWindow
(mesmo sem definir nenhum valor de transparência), a borda desaparece e você só pode redimensionar por meio da alça.O resultado parece:
fonte
Eu estava tentando criar uma janela sem
WindowStyle="None"
borda com mas quando testei, parece que aparece uma barra branca no topo, depois de algumas pesquisas parece ser uma "borda de redimensionamento", aqui está uma imagem (comentei em amarelo):Depois de algumas pesquisas na Internet e de muitas soluções difíceis não xaml, todas as soluções que encontrei eram code behind em C # e muitas linhas de código, encontrei indiretamente a solução aqui: Janela customizada máxima perde efeito de sombra projetada
Observação : você precisa usar a estrutura .NET 4.5 ou, se estiver usando uma versão mais antiga, use WPFShell, basta fazer referência ao shell e usá-lo
Shell:WindowChrome.WindowChrome
.Eu usei a
WindowChrome
propriedade Window, se você usar essa "borda de redimensionamento" branca desaparece, mas você precisa definir algumas propriedades para funcionar corretamente.CaptionHeight: Esta é a altura da área da legenda (barra de cabeçalho) que permite o snap Aero, clicando duas vezes como uma barra de título normal. Defina como 0 (zero) para fazer os botões funcionarem.
ResizeBorderThickness: Esta é a espessura na borda da janela, onde você pode redimensionar a janela. Eu coloquei 5 porque gosto desse número, e porque se você colocar zero fica difícil redimensionar a janela.
Depois de usar este código curto, o resultado é este:
E agora, a borda branca desapareceu sem usar
ResizeMode="NoResize"
eAllowsTransparency="True"
, também mostra uma sombra na janela.Posteriormente explicarei como fazer funcionar os botões (não usei imagens para os botões) facilmente com código simples e curto, sou novo e acho que posso postar no codeproject, pois aqui não encontrei o lugar para postar o tutorial.
Talvez haja outra solução (eu sei que existem soluções difíceis e difíceis para novatos como eu), mas isso funciona para meus projetos pessoais.
Aqui está o código completo
Obrigado!
fonte
Rectangle_PreviewMouseDown
evento corretamente.Embora a resposta aceita seja muito verdadeira, só quero salientar que AllowTransparency tem algumas desvantagens. Não permite que os controles da janela filho apareçam, ou seja, WebBrowser, e geralmente força a renderização do software, o que pode ter efeitos negativos no desempenho.
No entanto, existe uma solução melhor.
Quando você deseja criar uma janela sem borda redimensionável e capaz de hospedar um controle WebBrowser ou um controle Frame apontado para uma URL que você simplesmente não pode, o conteúdo do referido controle aparecerá vazio.
Eu encontrei uma solução alternativa; na janela, se você definir WindowStyle como None, ResizeMode como NoResize (tenha paciência, você ainda será capaz de redimensionar uma vez feito), então certifique-se de UNCHECKED AllowsTransparency, você terá uma janela de tamanho estático sem borda e mostrará o controle do navegador.
Agora, você provavelmente ainda deseja redimensionar, certo? Bem, podemos fazer isso com uma chamada de interoperabilidade:
E pronto, uma janela WPF sem borda e ainda móvel e redimensionável sem perder compatibilidade com controles como o WebBrowser
fonte
private enum ResizeDirection { Left = 61441, Right = 61442, Top = 61443, TopLeft = 61444, TopRight = 61445, Bottom = 61446, BottomLeft = 61447, BottomRight = 61448, }
Amostra aqui:
fonte
Eu estava tendo dificuldade em obter a resposta de @fernando-aguirre usando
WindowChrome
para trabalhar. Não estava funcionando no meu caso porque eu estava substituindoOnSourceInitialized
noMainWindow
e não chamando o método da classe base.Isso me deixou perplexo por muito tempo.
fonte