xaml resourcedictionary 内容 setter 前景显示不正确
xaml resourcedictionary content setter foreground not displaying correctly
我正在尝试制作一些标准化配色方案等的 ResourceDictionary,以添加到 dll class 库中以供将来应用程序使用。我是 XAML 的新手,在创建或使用字典的内容 setter 部分时似乎犯了一个错误。我无法设置和使用字典中文本的颜色。到目前为止,这是我所拥有的;可以看到,Content中TextBlock的Foreground设置为白色。
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:My_Class_Library.WPF_Resources">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="../WPF Resources/Buttons.xaml"/>
<ResourceDictionary Source="../WPF Resources/Brushes.xaml"/>
<ResourceDictionary Source="../WPF Resources/Sliders.xaml"/>
</ResourceDictionary.MergedDictionaries>
<Style x:Key="myButton" TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button" >
<Grid>
<Rectangle Name="ClickFill" Fill="ForestGreen" RadiusX="5" RadiusY="5"/>
<ContentPresenter RecognizesAccessKey="True" Content="{TemplateBinding Content}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="Content">
<Setter.Value>
<Grid>
<TextBlock Background="{x:Null}" Foreground="White"></TextBlock>
</Grid>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
这里是对词典的引用:
<Grid x:Class="My_Class_Library.Update_Information"
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:My_Class_Library"
HorizontalAlignment="Center" VerticalAlignment="Center">
<Grid.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="../WPF Resources/Buttons.xaml"/>
<ResourceDictionary Source="../WPF Resources/Brushes.xaml"/>
<ResourceDictionary Source="../WPF Resources/Sliders.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Grid.Resources>
<Button Name="Click"
Width="100" Height="30"
Style="{StaticResource myButton}"
Click="Click_Click">
_click
</Button>
</Grid>
然而,我看到的是:
,如您所见,它有黑色(可能是默认)文本而不是指定的白色。我哪里做错了,导致内容没有设置?
我知道每个人都讨厌像 "look at this, what's wrong with it?" 这样的问题,但我已经竭尽全力寻找解决方案 - 我正在观看大量的培训视频等等,以上是我的最大努力......几乎我尝试的其他一切都破坏了整个事情!非常感谢任何指点!
您的想法是对的,但您需要习惯于直接从 setter 样式模板设置属性。我还建议您从控件的默认样式模板开始,然后根据您的需要对其进行编辑,因为例如在这种情况下,您将失去所有额外的视觉状态,例如 MouseOver 等。
但是,为了您的直接问题,您要从模板中完全放弃 Content
属性(这是您的 ContentPresenter
工作),而只是做这(伪);
<Style x:Key="myButton" TargetType="Button">
<Setter Property="Foreground" Value="White"/>
<!-- Rest of it goes here -->
</Style>
...瞧。希望这对您有所帮助,干杯!
我正在尝试制作一些标准化配色方案等的 ResourceDictionary,以添加到 dll class 库中以供将来应用程序使用。我是 XAML 的新手,在创建或使用字典的内容 setter 部分时似乎犯了一个错误。我无法设置和使用字典中文本的颜色。到目前为止,这是我所拥有的;可以看到,Content中TextBlock的Foreground设置为白色。
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:My_Class_Library.WPF_Resources">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="../WPF Resources/Buttons.xaml"/>
<ResourceDictionary Source="../WPF Resources/Brushes.xaml"/>
<ResourceDictionary Source="../WPF Resources/Sliders.xaml"/>
</ResourceDictionary.MergedDictionaries>
<Style x:Key="myButton" TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button" >
<Grid>
<Rectangle Name="ClickFill" Fill="ForestGreen" RadiusX="5" RadiusY="5"/>
<ContentPresenter RecognizesAccessKey="True" Content="{TemplateBinding Content}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="Content">
<Setter.Value>
<Grid>
<TextBlock Background="{x:Null}" Foreground="White"></TextBlock>
</Grid>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
这里是对词典的引用:
<Grid x:Class="My_Class_Library.Update_Information"
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:My_Class_Library"
HorizontalAlignment="Center" VerticalAlignment="Center">
<Grid.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="../WPF Resources/Buttons.xaml"/>
<ResourceDictionary Source="../WPF Resources/Brushes.xaml"/>
<ResourceDictionary Source="../WPF Resources/Sliders.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Grid.Resources>
<Button Name="Click"
Width="100" Height="30"
Style="{StaticResource myButton}"
Click="Click_Click">
_click
</Button>
</Grid>
然而,我看到的是:
我知道每个人都讨厌像 "look at this, what's wrong with it?" 这样的问题,但我已经竭尽全力寻找解决方案 - 我正在观看大量的培训视频等等,以上是我的最大努力......几乎我尝试的其他一切都破坏了整个事情!非常感谢任何指点!
您的想法是对的,但您需要习惯于直接从 setter 样式模板设置属性。我还建议您从控件的默认样式模板开始,然后根据您的需要对其进行编辑,因为例如在这种情况下,您将失去所有额外的视觉状态,例如 MouseOver 等。
但是,为了您的直接问题,您要从模板中完全放弃 Content
属性(这是您的 ContentPresenter
工作),而只是做这(伪);
<Style x:Key="myButton" TargetType="Button">
<Setter Property="Foreground" Value="White"/>
<!-- Rest of it goes here -->
</Style>
...瞧。希望这对您有所帮助,干杯!