【问题标题】:WPF RelativeSource issue with nested controls嵌套控件的 WPF RelativeSource 问题
【发布时间】:2013-01-26 12:33:29
【问题描述】:

我有以下标记:

<Button Name="m_SaveButton" Command="{Binding SaveCommand}">
    <StackPanel>
        <Image Source="{StaticResource IconSave16}">
            <Image.Style>
                <Style TargetType="Image">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Path=IsEnabled, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}}" Value="False">
                            <Setter Property="Source" Value="{StaticResource IconSaveInactive16}" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Image.Style>
        </Image>
        <Label Content="Save" />
    </StackPanel>
</Button>

当 Button.IsEnabled 为 false 时,我想更改嵌套在 Button 内的图像。上面的标记不起作用。

我试图使用在这里找到的 Meleak 代码:WPF Mouseover Trigger Effect for Child Controls

有人可以建议我解决这个问题吗?

提前谢谢你!

【问题讨论】:

  • 您是否尝试过使用 ElementName 而不是 RelativeSource 进行绑定?
  • 嗯.. 还没有。我现在就试试。
  • 它也不起作用:&lt;DataTrigger Binding="{Binding IsEnabled, ElementName=m_SaveButton}" Value="False"&gt;...&lt;/DataTrigger&gt;

标签: wpf binding triggers nested-controls


【解决方案1】:

由于Value Precedence,您无法更改样式中的本地值。这应该可以。

<Image>
    <Image.Style>
        <Style TargetType="Image">
            <Setter Property="Source" Value="{StaticResource IconSave16}" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=IsEnabled, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}}" Value="False">
                    <Setter Property="Source" Value="{StaticResource IconSaveInactive16}" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Image.Style>
</Image>

【讨论】:

  • 天哪。我一周前遇到过这个!我怎么会忘记...谢谢LPL!
猜你喜欢
  • 2011-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-22
  • 1970-01-01
  • 2011-08-05
  • 2011-05-04
  • 1970-01-01
相关资源
最近更新 更多