使用Window.Shapes.Path未正确绘制WPF Buttonstyle

时间:2016-05-19 08:15:41

标签: c# wpf xaml button wpf-style

我目前正在学习使用MVVM模式的WPF,我有一个很奇怪的'行为,当我使用Windows.Shapes.Path绘制一个按钮。

进行一些测试我将问题缩小到纯WPF。这是我的XAML:

<Window x:Class="ButtonStyleTest.MainWindow"
    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:ButtonStyleTest"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525">
<Window.Resources>
    <Style x:Key="MyButtonStyle" TargetType="Button">
        <Setter Property="Background" Value="Red"/>
        <Setter Property="Content">
            <Setter.Value>
                <Path Data="M1,9 L9,1 M1,1 L9,9" Stroke="White" StrokeThickness="2" />
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <WrapPanel Grid.Column="0"  >
        <Button Style="{StaticResource MyButtonStyle}"/>
        <Button Style="{StaticResource MyButtonStyle}"/>
    </WrapPanel>
    <WrapPanel Grid.Column="1"  >
        <Button Style="{StaticResource MyButtonStyle}"/>
        <Button Style="{StaticResource MyButtonStyle}"/>
    </WrapPanel>
</Grid>

不幸的是我不允许发布图片,因为我需要10点声望:( 所以我只是发布链接 - 抱歉给您带来不便。

正在运行的程序如下所示 http://imageshack.com/a/img923/8541/HBAHyi.png

调整窗口大小后,按钮的绘制方式不同 http://imageshack.com/a/img922/4600/gzEXWj.png

如果我使用字符串&#34; X&#34;作为内容,即

<Window.Resources>
    <Style x:Key="MyButtonStyle" TargetType="Button">
        <Setter Property="Background" Value="Red"/>
        <Setter Property="Content" Value="x"/>
    </Style>
</Window.Resources>

每个按钮都会获得&#34; x&#34;。

在我的实际应用中,我找到了一种解决方法。按钮绑定到ObservableCollection。如果我在Datatemplate中指定<Path Data... />标记,则所有内容都会正确显示。将其定义为按钮样式时,它看起来像上面。

但是,我想了解为什么路径属性在一个样式中对我不起作用。

1 个答案:

答案 0 :(得分:0)

更改您的风格,如下所示:

<Style x:Key="MyButtonStyle" x:Shared="False" TargetType="Button">
    <Setter Property="Background" Value="Red"/>
    <Setter Property="Content">
        <Setter.Value>
            <Path Data="M1,9 L9,1 M1,1 L9,9" Stroke="White" StrokeThickness="2" />
        </Setter.Value>
    </Setter>
</Style>

然后它将以你想要的方式工作。

以下是x:Shared Attribute

的一些详细信息

它的基本功能是,当它设置为FALSE时,它会创建一个新的样式实例。您需要为每个按钮创建一个PATH的新实例。