C# 以编程方式设置ControlTemplate项

C# 以编程方式设置ControlTemplate项,c#,wpf,C#,Wpf,我不知道如何通过编程设置箭头的“笔划”。我在菜单栏中使用这些按钮,我希望当前选中的那个按钮的箭头变为绿色,其他所有按钮变为灰色 <Style x:Key="FooterGrayButtonStyle" TargetType="{x:Type Button}"> <Setter Property="HorizontalContentAlignment" Value="Center"/> <Setter Property="VerticalC

我不知道如何通过编程设置箭头的“笔划”。我在菜单栏中使用这些按钮,我希望当前选中的那个按钮的箭头变为绿色,其他所有按钮变为灰色

    <Style x:Key="FooterGrayButtonStyle" TargetType="{x:Type Button}">  
    <Setter Property="HorizontalContentAlignment" Value="Center"/>
    <Setter Property="VerticalContentAlignment" Value="Center"/>
    <Setter Property="MinHeight" Value="35" />
    <Setter Property="FontSize" Value="16"/>
    <Setter Property="Margin" Value="0,5,10,5" />
    <Setter Property="Foreground" Value="White" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Grid>
                    <Border x:Name="Bd" Background="#FF535A65" BorderBrush="Black" BorderThickness="1" CornerRadius="10">
                        <Path x:Name="arrow" Stretch="Fill" Stroke="#FFB1BB1C" StrokeThickness="5" HorizontalAlignment="Right" Margin="5" 
                                StrokeEndLineCap="Round" StrokeStartLineCap="Round" StrokeLineJoin="Miter" Width="13" Height="23" Data="M0,0 L1,1 0,2" />
                    </Border>
                    <ContentPresenter HorizontalAlignment="Left" Margin="15,-2,30,0" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" RecognizesAccessKey="True"/>
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsPressed" Value="True">
                        <Setter TargetName="Bd" Property="Background" Value="#FFB1BB1C" />
                        <Setter Property="Stroke" TargetName="arrow" Value="White"/>
                    </Trigger>
                    <Trigger Property="IsEnabled" Value="False">
                        <Setter Property="Stroke" TargetName="arrow" Value="#FFB7B7B7"/>
                        <Setter Property="Foreground" Value="#FFB7B7B7"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

您不能添加触发器吗:

<Trigger Property="IsFocused" Value="True">
    <Setter Property="StrokeEndLineCap" Value="Arrow" TargetName="arrow"/>
</Trigger>


或者问题出在没有使用触发器更新路径上?

您通常希望将某个状态表示为控件上的属性。按钮没有用于表示选定状态的内置属性,但ToggleButton有:IsChecked。如果您不能使用ToggleButton,您可以创建一个可以从代码中设置的按钮,该代码确定当前选定的按钮。然后可以在触发器中以与使用IsChecked相同的方式使用:

<Trigger Property="local:MyProperties.IsSelected" Value="True">
    <Setter TargetName="arrow" Property="Stroke" Value="Green"/>
</Trigger>