C# 如何在Wpf中将控件模板分配给窗口?
我试图定义一个控制模板,然后我想使用它,例如模式对话框。问题是,我遵循了stackoverflow和其他任何地方的所有说明,但是没有加载和应用样式/模板?相反,我得到了一个静态资源异常 那么,如果模板和窗口位于不同的文件中,如何将模板应用于我的窗口 有什么帮助吗C# 如何在Wpf中将控件模板分配给窗口?,c#,wpf,templates,controltemplate,C#,Wpf,Templates,Controltemplate,我试图定义一个控制模板,然后我想使用它,例如模式对话框。问题是,我遵循了stackoverflow和其他任何地方的所有说明,但是没有加载和应用样式/模板?相反,我得到了一个静态资源异常 那么,如果模板和窗口位于不同的文件中,如何将模板应用于我的窗口 有什么帮助吗 <Window x:Class="WpfWindowTemplateTest.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/pres
<Window x:Class="WpfWindowTemplateTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
Template="{StaticResource MyWindowTemplate}"
Style="{StaticResource MyWindowStyle}" />
我使用的模板是:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ControlTemplate x:Key="MyWindowTemplate" TargetType="{x:Type Window}">
<Border x:Name="WindowBorder" Style="{DynamicResource WindowBorderStyle}">
<Grid>
<Border Margin="4,4,4,4" Padding="0,0,0,0" x:Name="MarginBorder">
<AdornerDecorator>
<ContentPresenter/>
</AdornerDecorator>
</Border>
<ResizeGrip Visibility="Collapsed" IsTabStop="false" HorizontalAlignment="Right" x:Name="WindowResizeGrip"
VerticalAlignment="Bottom" />
</Grid>
</Border>
<ControlTemplate.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="ResizeMode" Value="CanResizeWithGrip"/>
<Condition Property="WindowState" Value="Normal"/>
</MultiTrigger.Conditions>
<Setter Property="Visibility" TargetName="WindowResizeGrip" Value="Visible"/>
<Setter Property="Margin" TargetName="MarginBorder" Value="4,4,4,20" />
</MultiTrigger>
<Trigger Property="WindowState" Value="Maximized">
<Setter Property="CornerRadius" TargetName="WindowBorder" Value="0,0,0,0"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
<Style x:Key="MyWindowStyle" TargetType="{x:Type Window}">
<Setter Property="AllowsTransparency" Value="False" />
<Setter Property="WindowStyle" Value="SingleBorderWindow" />
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}"/>
<Setter Property="Background" Value="Transparent" />
<Setter Property="ShowInTaskbar" Value="False" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Window}">
<Border>
<AdornerDecorator>
<ContentPresenter/>
</AdornerDecorator>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
使用DynamicResource而不是StaticResource
<Window x:Class="WpfWindowTemplateTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
Template="{DynamicResource MyWindowTemplate}"
Style="{DynamicResource MyWindowStyle}" />
将此添加到app.xaml
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/WpfWindowTemplateTest;component/MyWindowTemplate.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
确切的错误是什么?此ResourceDictionary加载在哪里?也不起作用。然后窗户仍然是黑色的。这就是为什么我现在对它着迷了好几个小时。奇怪的是,我可以通过这种方式将ControlTemplate设置到我的主窗口:/I编辑了我的答案:你需要在app.xaml中引用你的xaml;另一方面,黑色是因为您将AllowTransparency设置为false。谢谢。现在工作。但是,我仍然无法摆脱黑色的背景。不管我设定的背景色或允许透明度是什么。马蒂亚斯,这是一个很好的问题。我自己对这件“黑色”的事情也有一些问题,并试图找到它。