c# - 以样式更改按钮的内容?

标签 c# wpf xaml data-binding styles

我正在尝试做类似的事情:

<Window x:Class="WpfApplication1.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <Grid>
        <Button>
            <Button.Style>
                <Style TargetType="{x:Type Button}">
                    <Setter Property="Content"
                            Value="No mouse over" />
                    <Style.Triggers>
                        <Trigger Property="IsMouseOver"
                                 Value="True">
                            <Setter Property="Content">
                                <Setter.Value>
                                    <CheckBox Content="Mouse is over" />
                                </Setter.Value>
                            </Setter>
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </Button.Style>
        </Button>
    </Grid>
</Window>

但是,我收到一个运行时 XamlParseException 消息:

Cannot add content of type 'System.Windows.Controls.CheckBox' to an object of type 'System.Object'. Error at object 'System.Windows.Controls.CheckBox

我实际上是在尝试根据外部条件为按钮的内容绘制不同的图标。所以我实际上是在尝试使用 DataTrigger,但上面的示例简化了问题。有什么想法吗?

最佳答案

实际发生的错误是因为无法将 Visuals 直接设置为 Setter 值。 不过,通过使用 DataTemplate 设置 ContentTemplate 或将内容创建为资源(特定于按钮或位于其他位置),您可以获得所需的行为。

<Button>
    <Button.Resources>
        <CheckBox x:Key="Local_MouseOverContent" Content="Mouse is over" />
    </Button.Resources>
    <Button.Style>
        <Style TargetType="{x:Type Button}">
            <Setter Property="Content" Value="No mouse over" />
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="Content"
                            Value="{StaticResource Local_MouseOverContent}" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>

<Button>
    <Button.Style>
        <Style TargetType="{x:Type Button}">
            <Setter Property="Content" Value="No mouse over" />
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="ContentTemplate">
                        <Setter.Value>
                            <DataTemplate DataType="Button">
                                <CheckBox Content="Mouse is over" />
                            </DataTemplate>
                        </Setter.Value>
                    </Setter>
                </Trigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>

关于c# - 以样式更改按钮的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1050737/

相关文章:

c# - 在 DataGrid-Column 中显示图像

c# - 从 WinForms 应用程序重新启动计算机?

c# - Wpf 递归绑定(bind)

c# - WPF 和外部 CSS 文件

C#:将枚举类型作为参数传递

c# - 如何解决 RibbonApplicationMenu 的绑定(bind)错误

c# - 如何取消订阅 MvvmCross 中的 WeakSubscribe

wpf - 在控制上调用 "function"

XAML 中的 WPF 日期字符串格式

c# - 缩小图像尺寸 imagemagick