Wpf ResourceDictionary控件模板内的模板绑定
我有一本资源字典如下:Wpf ResourceDictionary控件模板内的模板绑定,wpf,xaml,uwp,Wpf,Xaml,Uwp,我有一本资源字典如下: <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:uwpControls="using:Microsoft.Toolkit.Uwp.UI.Controls" xmlns:controls="u
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:uwpControls="using:Microsoft.Toolkit.Uwp.UI.Controls"
xmlns:controls="using:Presentation.Common.Controls">
<Style x:Key="ExpanderStyleSection" TargetType="uwpControls:Expander">
<Setter Property="HeaderStyle" Value="{StaticResource LightExpanderHeaderToggleButtonStyle}"/>
<Setter Property="Margin" Value="4"/>
</Style>
<Style x:Key="LightExpanderHeaderToggleButtonStyle" TargetType="ToggleButton">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToggleButton">
<Grid x:Name="RootGrid"
Background="{StaticResource BrushBeckmanAquaA1}"> <!-- I want to change the background from an other View based on some condition -->
</ControlTemplate>
</Style>
</ResourceDictionary>
现在,我在另一个视图中使用本词典中的样式,如下所示
<uwpControls:Expander x:Name="ExpanderLisSharedSettings" Grid.Row="0" Style="{StaticResource ExpanderStyleSection}">
<!--Some Content here-->
</uwpControls:Expander
您可以创建包含SolidColorBrush属性的ViewModel,并将其与RootGrid的背景绑定,并且需要在使用此样式的页面中声明DataContext。在这种情况下,它适用于绑定
如果要在ResourceDictionary中使用x:bind,则需要为其创建代码隐藏类。由于x:Bind依赖于代码生成,因此它需要一个代码隐藏文件,其中包含调用InitializeComponent的构造函数(以初始化生成的代码)
这里我们以绑定为例
Page.xaml:
<ToggleButton Style="{StaticResource LightExpanderHeaderToggleButtonStyle}"></ToggleButton>
ResourceDictionary.xaml:
<Style x:Key="LightExpanderHeaderToggleButtonStyle" TargetType="ToggleButton">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToggleButton">
<Grid x:Name="RootGrid" Background="{Binding MyColor}">
<TextBlock Text="{Binding Fname}"></TextBlock>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
您可以创建包含SolidColorBrush属性的ViewModel,并将其与RootGrid的背景绑定,并且需要在使用此样式的页面中声明DataContext。在这种情况下,它适用于绑定
如果要在ResourceDictionary中使用x:bind,则需要为其创建代码隐藏类。由于x:Bind依赖于代码生成,因此它需要一个代码隐藏文件,其中包含调用InitializeComponent的构造函数(以初始化生成的代码)
这里我们以绑定为例
Page.xaml:
<ToggleButton Style="{StaticResource LightExpanderHeaderToggleButtonStyle}"></ToggleButton>
ResourceDictionary.xaml:
<Style x:Key="LightExpanderHeaderToggleButtonStyle" TargetType="ToggleButton">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToggleButton">
<Grid x:Name="RootGrid" Background="{Binding MyColor}">
<TextBlock Text="{Binding Fname}"></TextBlock>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
在模板中使用TemplateBinding
。您可以使用
定义默认值:
<Style x:Key="LightExpanderHeaderToggleButtonStyle" TargetType="ToggleButton">
<Setter Property="Background" Value="{StaticResource BrushBeckmanAquaA1}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToggleButton">
<Grid x:Name="RootGrid" Background="{TemplateBinding Background}">
...
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
例如,如果视图模型定义了一个名为“TheBackground”的Brush
属性,则可以像往常一样绑定到它(只有UWP支持{x:bind}
):
在模板中使用模板绑定。您可以使用
定义默认值:
<Style x:Key="LightExpanderHeaderToggleButtonStyle" TargetType="ToggleButton">
<Setter Property="Background" Value="{StaticResource BrushBeckmanAquaA1}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToggleButton">
<Grid x:Name="RootGrid" Background="{TemplateBinding Background}">
...
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
例如,如果视图模型定义了一个名为“TheBackground”的Brush
属性,则可以像往常一样绑定到它(只有UWP支持{x:bind}
):
仅当视图模型具有名为“MyColor”的属性或模板中使用的任何硬编码路径时,此解决方案才有效。您应该绑定到控件的依赖项属性。此解决方案仅在视图模型具有名为“MyColor”的属性或模板中使用的任何硬编码路径时有效。您应该绑定到控件的依赖项属性。
<uwpControls:Expander x:Name="ExpanderLisSharedSettings" Grid.Row="0"
Background="{Binding TheBackground}" />