2015-11-22 19 views
5

La mia applicazione desktop RibbonWindow mostra un bordo nero spesso su entrambi i lati in Windows 10. Puoi riprodurlo con una semplice applicazione WPF che mostra una RibbonWindow. Il bordo è non visualizzato su Windows 8.x.Bordo spesso a destra ea sinistra

Qualcuno sa, come rimuovere il confine?

enter image description here

Un tizio ha posto una domanda simile su msdn, e la risposta e 'si tratta di un problema noto'. Ma seguendo il fornito link non riesco a trovare alcun specifico.

Quindi qualcuno può aiutarmi a uscire da questo?

Modifica: il colore dei bordi è nero, se la finestra non è attiva. Se la finestra è attiva, il bordo ottiene il colore dal colore dell'accento personalizzato di Windows.

+0

Sulla base dei link che hai fornito sembra che è solo che , "un problema noto". Un altro poster ha detto di non usare la RibbonWindow poiché è terribilmente obsoleto. Dopo aver esaminato alcuni dei problemi di RibbonWindow, sembra che Microsoft abbia chiuso molti di essi e li abbia impostati su "non risolverli", nonostante siano problemi relativamente gravi. Potrebbe essere che RibbonWindow sia in via di deprecazione. – Danielle

+0

Almeno RibbonWindow non è ancora stato deprecato. Seguendo i collegamenti, non esiste una descrizione del "border bug". Solo: * Il contenuto della finestra (area client) viene ritagliato quando la finestra è in modalità Massima. * Il bordo della finestra è troppo sottile. * QuickAccessToolbar non ha abbastanza "margine" verso l'alto. * Il titolo della finestra è sfocato e non ha "margine" sufficiente verso l'alto. – gReX

+0

https://connect.microsoft.com/VisualStudio/Feedback/Details/1263145 – gReX

risposta

1

Considerare l'utilizzo di WindowChrome con GlassFrameThickness = GlassFrameCompleteThickness.

Questa non è una soluzione ideale - dovresti fare attenzione a lasciare spazio al titolo della finestra e ai pulsanti di ingrandimento, riduzione a icona e chiusura. Detto questo, si sbarazza del problema di confine con cui si ha a che fare.

Per un esempio di come gestire il layout del contenuto quando WindowChrome è in uso, vedere risposta this SO.

Ecco un XAML completo che dovrebbe anche aiutare:

<RibbonWindow x:Class="RibbonTest.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:RibbonTest" 
       xmlns:shell="clr-namespace:System.Windows.Shell;assembly=PresentationFramework" 
     mc:Ignorable="d" 
     Title="RibbonWindow" Height="350" Width="525"> 
    <WindowChrome.WindowChrome> 
     <WindowChrome GlassFrameThickness="{x:Static shell:WindowChrome.GlassFrameCompleteThickness}"/> 
    </WindowChrome.WindowChrome> 
    <Window.Template> 
     <ControlTemplate> 
      <Grid> 
       <Grid.RowDefinitions> 
        <RowDefinition Height="30"/> 
        <RowDefinition Height="1*"/> 
       </Grid.RowDefinitions> 

       <!-- Opacity of < 1.0 helps show the minimize, maximize and close buttons --> 
       <Border Grid.Row="0" Background="Wheat" Opacity="0.8"> 
        <Grid> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="30" /> 
          <ColumnDefinition Width="1*"/> 
         </Grid.ColumnDefinitions> 


         <!-- Window Title - Center Aligned --> 
         <TextBlock 
          Grid.Column="1" 
          TextAlignment="Center" 
          VerticalAlignment="Center" 
          Text="{Binding Title, RelativeSource={RelativeSource TemplatedParent}}" /> 

        </Grid> 
       </Border> 

       <!-- This is the Window's main content area --> 
       <!-- Top margin 44 = WindowChrome ResizeBorderThickness (4) + CaptionHeight(40) --> 
       <!-- Bottom margin 1 is somewhat arbitrary --> 
       <Border Grid.Row="1" Background="White" Opacity="0.5"> 
        <ContentPresenter Content="{Binding Content, RelativeSource={RelativeSource TemplatedParent}}"/> 
       </Border> 
      </Grid> 
     </ControlTemplate> 
    </Window.Template> 
    <Grid> 
     <Border Background="Cyan" BorderBrush="BlanchedAlmond" BorderThickness="5"> 
      <Label FontSize="80" HorizontalAlignment="Center" VerticalAlignment="Center">Hello World</Label> 
     </Border> 
    </Grid> 
</RibbonWindow> 

Il RibbonWindow risultante sarebbe simile a questa:

enter image description here

+0

molto bello. Funziona con il mio progetto di esempio :-). Invece di impostare il Boarder su Wheat I lo lego a {DynamicResource {x: Static SystemColors.ActiveBorderBrush}}. Controllo dell'influenza sui miei stili. – gReX

Problemi correlati