【问题标题】:WPF Button DataTrigger not setting Content correctlyWPF 按钮 DataTrigger 未正确设置内容
【发布时间】:2020-04-27 12:58:14
【问题描述】:

我正在创建一个类,继承自 Window,它为 TitleBar 添加了一些额外的功能。

我尝试使用此 XAML 作为最小化、恢复/最大化和关闭按钮来重新创建 Windows 10 标题栏:

            <Button x:Name="CloseButton"
                    Click="CloseButton_Click"
                    HorizontalAlignment="Center"
                    VerticalAlignment="Center"
                    Content="&#xE106;" FontFamily="Segoe MDL2 Assets" FontSize="10" Padding="15,10" Background="Transparent" BorderBrush="Transparent" Foreground="White"
                    DockPanel.Dock="Right">
                <Button.Style>
                    <Style TargetType="{x:Type Button}"/>
                </Button.Style>
            </Button>

            <Button x:Name="MaximizeButton"
                    Click="MaximizeButton_Click"
                    DockPanel.Dock="Right"
                    HorizontalAlignment="Center"
                    VerticalAlignment="Center"
                    FontFamily="Segoe MDL2 Assets" FontSize="10" Padding="15,10" Background="Transparent" BorderBrush="Transparent" Foreground="White">
                <Button.Style>
                    <Style TargetType="{x:Type Button}">
                        <Setter Property="Button.Content" Value="&#xE739;" />
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}, Path=WindowState}" Value="Maximized">
                                <Setter Property="Button.Content" Value="&#xE923;" />
                            </DataTrigger>
                            <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type local:MainWindow}}, Path=WindowState}" Value="Normal">
                                <Setter Property="Button.Content" Value="&#xE739;" />
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </Button.Style>
            </Button>

            <Button x:Name="MinimizeButton"
                    Content="&#xE949;"
                    Click="MinimizeButton_Click"
                    DockPanel.Dock="Right"
                    HorizontalAlignment="Center"
                    VerticalAlignment="Center"
                    FontFamily="Segoe MDL2 Assets" FontSize="10" Padding="15,15,15,5" Background="Transparent" BorderBrush="Transparent" Foreground="White">
                <Button.Style>
                    <Style TargetType="{x:Type Button}"/>
                </Button.Style>
            </Button>

问题是,虽然我的“最大化”按钮最初是这样正确显示的:

如果我点击它,它会变成这样:

这看起来像是一种无效字符?根据Segoe UI MDL2 icon guidelines,它是一个有效字符。

如果我再次单击它来恢复它,恢复工作正常,但图标保持不变并且不会变回正确的图像,这个:

我的StyleDataTrigger 有问题吗?

你会注意到我已经尝试过 AncestorType={x:Type Window}}AncestorType={x:Type local:MainWindow}}MainWindow 是我的班级,但这些都没有任何区别。

【问题讨论】:

  • 为什么不直接删除第二个触发器?您只想显示不同的图标和触发器,当窗口为 Maximized 时,不是吗?
  • 我添加了第二个触发器以试图让它正确恢复,但它没有工作 - 所以我在没有它的情况下尝试过它并且它具有相同的行为(即显示不正确的图像和不再最大化时未更正)。
  • 恐怕您的问题无法重现。
  • 啊,我意识到我在导致问题的MaximizeButton_Click 按钮中做了一些愚蠢的事情。

标签: c# wpf xaml


【解决方案1】:

我意识到我在 MaximizeButton_Click 方法中设置了 Button.Content,但我已经忘记了。删除它,一切都会按预期工作。

【讨论】:

    猜你喜欢
    • 2011-06-10
    • 1970-01-01
    • 2010-12-25
    • 2019-07-30
    • 1970-01-01
    • 2010-09-10
    • 2012-10-23
    • 2011-03-22
    • 1970-01-01
    相关资源
    最近更新 更多