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>

...瞧。希望这对您有所帮助,干杯!