2017-06-19 38 views
0

我为我的应用程序Windows创建了自定义模板。这是一个在App.xaml中将样式/模板应用到窗口后,无法在WPF窗口中看到控件

<Application.Resources> 
     <ResourceDictionary> 
      <Style x:Key="XWindow" TargetType="{x:Type Window}"> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate > 
          <Border BorderThickness="3"> 
           <Border.Effect> 
            <DropShadowEffect BlurRadius="5" Direction="270" RenderingBias="Quality" ShadowDepth="0.5" Opacity="0.8" Color="#FF00B9FF"/> 
           </Border.Effect> 
           <Grid Background="White"> 
            <local:ControlButtons Height="38" VerticalAlignment="Top" HorizontalAlignment="Right"/> 
            <Border BorderBrush="#99007CF7" BorderThickness="1"/> 
           </Grid> 
          </Border> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </ResourceDictionary> 
    </Application.Resources> 

在我MainWindow.xaml我已经应用这种风格像这样(和它的作品):<Window [...] Style="{DynamicResource XWindow }"

所以样式应用到窗口。但是当我在窗口中放置一个控件时,我看不到它,甚至不能选择它。它在XAML代码中,但即使当我调试它不在窗口上时。任何人都有线索?

有一个截图: XAML Problem

这是什么,当我添加一个简单的按钮,它通常应做的事:XAML Norrmal

+2

应该有模板,这说明窗口的实际内容一个ContentPresenter。 – Clemens

回答

0

正如指出的@Clemens你忘了添加ContentPresenterControlTemplate。这是窗口的实际内容将被显示的地方。

你应该还记得把ContentPresenterAdornedDecorator

<Style x:Key="XWindow" TargetType="{x:Type Window}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Window}"> 
       <Border BorderThickness="3"> 
        <Border.Effect> 
         <DropShadowEffect BlurRadius="5" Direction="270" RenderingBias="Quality" ShadowDepth="0.5" Opacity="0.8" Color="#FF00B9FF"/> 
        </Border.Effect> 
        <Grid Background="White"> 
         <local:ControlButtons Height="38" VerticalAlignment="Top" HorizontalAlignment="Right"/> 
         <Border BorderBrush="#99007CF7" BorderThickness="1"> 
          <AdornerDecorator> 
           <ContentPresenter/> 
          </AdornerDecorator> 
         </Border> 
        </Grid> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

AdornedDecorator指定AdornerLayer在视觉树中的位置在MSDN上这里说:http://msdn.microsoft.com/en-us/library/system.windows.documents.adornerdecorator.aspx。例如,如果打算在验证错误显示在装饰器图层上时减少窗口中的任何验证错误,您将需要一个验证错误。

编辑:你也应该设置ControlTemplateTargetType属性:

<ControlTemplate TargetType="{x:Type Window}"> 
+0

谢谢你的回答。我试过这个,但没有改变任何东西。 – user3673720

+0

看我的编辑。您还应该设置ControlTemplate的TargetType属性。 – mm8