【问题标题】:WPF Using template with DataTriggersWPF 将模板与 DataTriggers 一起使用
【发布时间】:2015-06-07 11:29:19
【问题描述】:

我有一个按钮,它的 DataContext 上附加了两个图像。
显示的图像绑定到按钮 IsEnabled 属性。
这是按钮的 XAML:

<Button Name="SubmitButton" IsEnabled="{Binding IsSubmitEnabled}" Background="Transparent"> 
<Image Name="SubmitButtonImage" Height="50" Width="291" MinHeight="50" MinWidth="291">
    <Image.Style>
        <Style TargetType="{x:Type Image}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsSubmitEnabled}" Value="True">

                    <Setter Property="Source" Value="/Resources/startup/Submit_enabled.png"></Setter>
                </DataTrigger>

                <DataTrigger Binding="{Binding IsSubmitEnabled}" Value="False">
                    <Setter Property="Source" Value="/Resources/startup/Submit_disabled.png"></Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Image.Style>
</Image>

现在我不想在 DataTrigger Value 中指定图像,而是想使用在文件中定义的模板,如下所示:

        <ControlTemplate x:Key="SubmitEnabledTemplate" TargetType="{x:Type Button}">
        <Border                 
            Height="{TemplateBinding Height}"
            Background="{TemplateBinding Background}"
            BorderBrush="{TemplateBinding BorderBrush}"
            BorderThickness="{TemplateBinding BorderThickness}"
            SnapsToDevicePixels="true">
            <Image Source="/Resources/startup/Submit_enabled.png"></Image>
        </Border>
    </ControlTemplate>

    <ControlTemplate x:Key="SubmitDisabledTemplate" TargetType="{x:Type Button}">
        <Border                 
            Height="{TemplateBinding Height}"
            Background="{TemplateBinding Background}"
            BorderBrush="{TemplateBinding BorderBrush}"
            BorderThickness="{TemplateBinding BorderThickness}"
            SnapsToDevicePixels="true">
            <Image Source="/Resources/startup/Submit_disabled.png"></Image>
        </Border>
    </ControlTemplate>

有什么办法吗?

【问题讨论】:

  • 也许你可以回顾一下这个很棒的answer

标签: c# wpf xaml


【解决方案1】:

试试DataTemplate Trigger,这里有一个可能相关的例子:

<ItemsControl ItemsSource="{Binding Path=Groups}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>

            <ContentControl x:Name="cc" Content="{Binding}" ContentTemplate="{DynamicResource ItemTemplate}"/>

            <DataTemplate.Triggers>
                <DataTrigger Binding="{Binding Path=IsLeaf}" Value="False">

                    <Setter TargetName="cc" Property="ContentTemplate" Value="{DynamicResource GroupTemplate}"/>
                </DataTrigger>
            </DataTemplate.Triggers>

        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

查看DataTemplate.Triggers 属性。

【讨论】:

    【解决方案2】:

    WPF 也有切换控制模板的选项 代码:

        <Window.Resources>
        <ControlTemplate x:Key="SubmitEnabledTemplate" TargetType="{x:Type Button}">
            <Border                 
                Height="{TemplateBinding Height}"
                Background="{TemplateBinding Background}"
                BorderBrush="{TemplateBinding BorderBrush}"
                BorderThickness="{TemplateBinding BorderThickness}"
                SnapsToDevicePixels="true">
                <Image Source="/Resources/startup/Submit_enabled.png"></Image>
            </Border>
        </ControlTemplate>
    
        <ControlTemplate x:Key="SubmitDisabledTemplate" TargetType="{x:Type Button}">
            <Border                 
                Height="{TemplateBinding Height}"
                Background="{TemplateBinding Background}"
                BorderBrush="{TemplateBinding BorderBrush}"
                BorderThickness="{TemplateBinding BorderThickness}"
                SnapsToDevicePixels="true">
                <Image Source="/Resources/startup/Submit_disabled.png"></Image>
            </Border>
        </ControlTemplate>
    </Window.Resources>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="50" />
        </Grid.RowDefinitions>
        <Button Grid.Row="0">
            <Button.Style>
                <Style TargetType="Button">
                    <Setter Property="Template"
                            Value="{StaticResource SubmitEnabledTemplate}"/>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding IsSubmitButtonEnabled}"
                                     Value="False">
                            <Setter Property="Template"
                                    Value="{StaticResource SubmitDisabledTemplate}"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Button.Style>
        </Button>   
    </Grid>
    

    【讨论】:

      猜你喜欢
      • 2019-02-01
      • 2016-06-02
      • 1970-01-01
      • 1970-01-01
      • 2021-08-08
      • 2014-09-08
      • 2012-09-15
      • 2011-06-03
      • 2017-09-02
      相关资源
      最近更新 更多