2017-08-24 11 views
0

私はクロームのボタンを置きたいのだと私は、このソリューションWPFの背景には、間違った

Solution.を見つけました。しかし、それは黒とbackgrondレンダリングさrenderinされます。私はどこにでも黒を設定していない、それはどのように黒ですか?

<WindowChrome.WindowChrome> 
    <WindowChrome GlassFrameThickness="0.5,28,0,0.5" NonClientFrameEdges="Right"/> 
</WindowChrome.WindowChrome> 
<Window.Template> 
    <ControlTemplate> 
     <ContentPresenter Content="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=Window}, Path=Content}"/> 
    </ControlTemplate> 
</Window.Template> 
<Grid> 
    <StackPanel Orientation="Horizontal" VerticalAlignment="Top" HorizontalAlignment="Right"> 

     <Button Content="Help" WindowChrome.IsHitTestVisibleInChrome="True" Height="28" Margin="0,0,120,0"/> 
    </StackPanel> 

WPF window

+0

ウィンドウにコンテンツがありますか? – dotNET

+0

編集された質問 – murmansk

+0

2つの素早いものを試してみてください。まずStackPanelのアラインメントを 'Stretch'に設定します。次に、 'GlassFrameThickness'を実行して、それが何らかの効果を持つかどうかを確認します。 – dotNET

答えて

1

自分で背景をペイントする必要があります。あなたが見る黒い部分が塗装されていない領域です

<Window x:Class="WpfApplication1.MainWindoq" 
     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" 
     mc:Ignorable="d" 
     Title="MainWindow" Height="300" Width="300"> 
    <WindowChrome.WindowChrome> 
     <WindowChrome GlassFrameThickness="0.5,28,0,0.5" NonClientFrameEdges="Right"/> 
    </WindowChrome.WindowChrome> 
    <Window.Template> 
     <ControlTemplate> 
      <Grid> 
       <Grid.RowDefinitions> 
        <RowDefinition Height="28" /> 
        <RowDefinition /> 
       </Grid.RowDefinitions> 
       <StackPanel Orientation="Horizontal" VerticalAlignment="Top" HorizontalAlignment="Right"> 
        <Button Content="Help" WindowChrome.IsHitTestVisibleInChrome="True" Height="28" Margin="0,0,120,0" 
          Click="Button_Click"/> 
       </StackPanel> 
       <Border Background="White" Grid.Row="1"> 
        <ContentPresenter Content="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=Window}, Path=Content}" /> 
       </Border> 
      </Grid> 
     </ControlTemplate> 
    </Window.Template> 
    <Grid> 

    </Grid> 
</Window> 

ControlTemplateButtonを入れて、あなたが背景を指定した別の行にContentPresenterを移動します。これはデフォルトでは黒で、白ではありません。

0

私はそれがあなたのコントロールテンプレートでだと思うだけでコンテンツを表示するには、 "...."、あなたは "のControlTemplateを" 設定コントロールテンプレートで

<ControlTemplate TargetType="{x:Type local:MainWindow}" > 
      <Grid> 
       <Rectangle Fill="Blue" VerticalAlignment="Top" Width="{TemplateBinding Width}" 
             Height="{TemplateBinding Height}"></Rectangle> 
       <!-- This is the ContentPresenter that displays the window content. --> 
       <Border Margin="0,40,0,5" > 
        <ContentPresenter Content="{TemplateBinding Content}"/> 
       </Border> 
       <!--This is the transparent white rectangle that goes behind the window content.--> 
       <Border Margin="1,40,1,5" BorderBrush="Gray" BorderThickness="0,1,0,1" 
          Grid.ZIndex="-1"> 
        <Rectangle Fill="White" Opacity="0.5" /> 
       </Border> 

       <!-- Window Title --> 
       <TextBlock VerticalAlignment="Top" TextAlignment="Left" 
         Text="{Binding RelativeSource= 
            {RelativeSource TemplatedParent}, Path=Title}" /> 
      </Grid> 
     </ControlTemplate> 
+0

それは全体のウィンドウをカバーします。 – murmansk

0

1を変えてみてください。
2は、コンテンツでは、グリッドは、(バックグラウンドがnullであってもよい)

いくつかのテストを行う任意の様式なしで
は、ボタンのクリックハンドラ

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    var color = Grid.Background;//is null 
} 
0

ないあなたの質問に直接答えを追加していますが、任意のサードパーティのソリューションを使用せずに後にしている効果を得ることができます。ボタンのVerticalAlignmentTopに設定してから、ネガティブトップMarginを使用してタイトルバーに移動します。私はこのようなウィンドウを作成するために、過去にその技術を使用しています

enter image description here

はあなた WindowStyle Noneへと AllowsTransparency Trueに設定する必要があります。この場合、しかしそれを忘れないでください。アプリケーションに必要な場合は、自分でシステムボタンを描く必要があります。

関連する問題