WPF使用用户控件资源中相同按钮样式,但添加用于更改每个按钮图像触发器

of1yzvn4  于 2022-11-18  发布在  其他
关注(0)|答案(1)|浏览(118)

我正在尝试创建一个按钮,当用户单击该按钮时,它会改变图标的颜色(从白色变为黑色)。我已经在用户控件资源中为该按钮预设了一个样式,但我不想修改它。我只需要改变图标的颜色,其中我使用了两个颜色不同的相同图像。

<UserControl.Resources>

        <!--Extended Button Style from Infragistics MetroDark Style-->
        <Style TargetType="{x:Type Button}"
               BasedOn="{StaticResource ButtonStyle}">
            <Setter Property="Margin" Value="10"/>
            <Setter Property="VerticalContentAlignment" Value="Center"/>
            <Setter Property="HorizontalContentAlignment" Value="Center"/>
            <Setter Property="Cursor" Value="Hand"/>
            <Style.Resources>
                <Style TargetType="Rectangle">
                    <Setter Property="RadiusX" Value="8"/>
                    <Setter Property="RadiusY" Value="8"/>
                </Style>
            </Style.Resources>
            <Style.Triggers>
                <Trigger Property="Button.IsPressed"
                         Value="True">
                    <Setter x:Name="ImageDefault"
                            Property="Visibility"
                            Value="Collapsed"/>
                    <Setter x:Name="ImageOnClick"
                            Property="Visibility"
                            Value="Visible"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </UserControl.Resources>

下面是我的按钮,在用户控制资源之后:

<Button Command="{Binding NavigateCommand}"
                CommandParameter="CalibrationMain">
            <StackPanel>
                <Image Name="ImageDefault"
                       Source="pack://application:,,,/Images;component/Icons/UnknownSize/CalibrationIconWhite.png"
                       Width="100"
                       Height="100"
                       Visibility="Visible"/>
                <Image Name="ImageOnClick"
                       Source="pack://application:,,,/Images;component/Icons/UnknownSize/CalibrationIconBlack.png"
                       Width="100"
                       Height="100"
                       Visibility="Collapsed"/>
                <TextBlock HorizontalAlignment="Center"
                           VerticalAlignment="Top"
                           Text="Calibration"
                           FontSize="18"/>
            </StackPanel>
        </Button>

当用户在按钮上按下鼠标左键时,如何使“ImageDefault”折叠并使“ImageOnClick”可见,而不更改父样式?有没有更有效和更有组织的方法来实现这一点?
由于作用域的原因,我无法在用户控件资源中使用x:Name或TargetName使其工作。
任何帮助都是感激不尽的!

yi0zb3m4

yi0zb3m41#

您没有回答我关于您希望对哪一家酒店做出React的更多澄清要求:ButtonBase.IsPressed propertyToggleButton.IsChecked property
在您显示的样式XAML中,您尝试在IsPressed属性上创建触发器,因此我假设您需要ButtonBase.IsPressed
下面是一个XAML示例:

<Button Command="{Binding NavigateCommand}"
            CommandParameter="CalibrationMain">
        <StackPanel>
            <Image Name="ImageDefault"
                    Width="100"
                    Height="100"
                    Visibility="Visible">
                <Image.Style>
                    <Style TargetType="Image">
                        <Setter Property="Source"
                                Value="pack://application:,,,/Images;component/Icons/UnknownSize/CalibrationIconWhite.png"/>
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding IsPressed, Mode=OneWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Button}}}"
                                         Value="True">
                                <Setter Property="Source"
                                        Value="pack://application:,,,/Images;component/Icons/UnknownSize/CalibrationIconBlack.png"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </Image.Style>
            </Image>
            <TextBlock HorizontalAlignment="Center"
                        VerticalAlignment="Top"
                        Text="Calibration"
                        FontSize="18"/>
        </StackPanel>
    </Button>

还可以将按钮内容的可视化转换为通用样式:
第一次

相关问题