相关疑难解决方法(0)

如何在不覆盖现有样式的情况下向WPF自定义控件添加触发器?

我正在创建一个从切换按钮扩展的简单自定义控件,允许用户直接在XAML中指定已检查和未检查的内容.它运行良好,但它基于一个触发器,我不知道如何定义触发器,除了一个样式.如果我定义样式,那么我将失去在自定义控件之外设置的任何内容.

我希望能够做的只是将此触发器附加到控件上其他位置设置的任何现有样式.

这是样式/触发器的XAML.

<ToggleButton.Style>
    <Style TargetType="{x:Type ToggleButton}" BasedOn="{StaticResource {x:Type ToggleButton}}">
        <Setter Property="Content" Value="{Binding RelativeSource={RelativeSource Self}, Path=UncheckedContent}" />
        <Style.Triggers>
            <Trigger Property="IsChecked" Value="True">
                <Setter Property="Content"
                        Value="{Binding RelativeSource={RelativeSource Self}, Path=CheckedContent}" />
            </Trigger>
        </Style.Triggers>
    </Style>
</ToggleButton.Style>
Run Code Online (Sandbox Code Playgroud)

我尝试使用默认类型通过BasedOn继承样式,但如果自定义控件具有由其父级设置的显式样式,则它将无法工作.我也考虑过EventTriggers,但我不相信会有一个事件来初始化控件.

感谢任何人都能提供的帮助.:)

c# wpf triggers styles

18
推荐指数
1
解决办法
1万
查看次数

wpf在自定义控件中保留基本样式

我创建了一个自定义按钮,因为我想要一个图像和文本在其中,如下所示:

<Style TargetType="{x:Type Local:ImageButton}">
     <Setter Property="Template">
         <Setter.Value>
             <ControlTemplate TargetType="{x:Type Local:ImageButton}">
                  <StackPanel Height="Auto" Orientation="Horizontal">
                       <Image Margin="0,0,3,0" Source="{TemplateBinding ImageSource}"/>
                       <TextBlock Text="{TemplateBinding Content}" /> 
                   </StackPanel>
             </ControlTemplate>
          </Setter.Value>
     </Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)

这里,ImageButton是一个继承自Button类并将ImageSource作为依赖项属性的类.

但我想保持原始按钮的外观和感觉.我该怎么做?谢谢.

wpf styles custom-controls

2
推荐指数
1
解决办法
4487
查看次数

标签 统计

styles ×2

wpf ×2

c# ×1

custom-controls ×1

triggers ×1