【问题标题】:Setting property in control from child in wpf在 wpf 中从子级设置控件中的属性
【发布时间】:2019-02-08 12:09:21
【问题描述】:

为了简单起见说我有这个控件叫做 DetailArea

<UserControl x:Class="DetailArea">
    <Grid>
       <CustomDataControl x:Name="MyDataControl" />
    </Grid>
</UserControl>

在另一个控件中我使用我的 DetailArea

<UserControl x:Class="Display">
    <Grid>
        <DetailArea />
    </Grid>
</UserControl>

DetailArea 控件中的CustomDataControl 具有公共可见性依赖属性,就像我希望能够设置为隐藏的所有UI 元素属性一样。

如何从显示控件执行此操作?

编辑:我无法修改 DetailArea wpf 或代码,因为它位于我无法控制的另一个中。

【问题讨论】:

  • 你想怎么控制它?有一个按钮?
  • @LittleBit 我只想永久隐藏它。不需要。
  • 您可以添加/修改 App.xaml 或添加其他样式吗?而且这个CustomControl只存在一次吗?
  • @LittleBit No 不能修改 App.xaml。我可以添加其他样式。它只存在一次。

标签: c# wpf xaml styles visibility


【解决方案1】:

我无法修改 DetailArea wpf 或代码,因为它位于我无法控制的另一个中。

那么您不能使用 XAML 设置 CustomDataControl 的属性。

您应该做的是将添加依赖属性添加到DetailArea 类并将CustomDataControlVisibility 属性绑定到这个。然后可以在DisplayUserControl中设置这个属性:

<DetailArea Visibility="Collapsed" />

如果由于某种原因无法修改DetailsArea,则必须以编程方式设置属性,例如:

detailArea.MyDataControl.Visibility = Visibility.Collapsed;

【讨论】:

    【解决方案2】:

    根据您在评论中的回答,我建议您应用仅影响提到的控件的样式。像这样的

    <UserControl x:Class="Display">
        <Grid>
            <Grid.Resources>
                <Style TargetType="{x:Type CustomDataControl}" BasedOn="{StaticResource KeyOfCustomDataControlStyle}">
                    <Setter Property="Visibility" Value="Hidden"/>
                </Style>
            </Grid.Resources>
            <DetailArea />
        </Grid>
    </UserControl>
    

    注意:这只是一个伪代码,请修改它以匹配您的环境。

    注意2:BasedOn="{StaticResource KeyOfCustomDataControlStyle}"是可选的。


    编辑 我已经删除了x:Key="MakeInvisible",因为样式可能没有正确应用,详情见here(致@Jack)。

    【讨论】:

    • 这是一个不错的方法,看起来效果不错。我建议删除x:Key,因为您将无法在控件中显式设置样式。
    • 我不知道这些问题,感谢您提及。答案已修改。
    猜你喜欢
    • 1970-01-01
    • 2011-06-28
    • 2011-03-23
    • 1970-01-01
    • 2014-12-12
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多