【问题标题】:Use properties of the base control that is inside the UserControl使用 UserControl 内的基本控件的属性
【发布时间】:2019-04-16 15:26:54
【问题描述】:

如何在不使用DependencyProperty 的情况下使用用户控件内的控件属性?

既然,例如,如果我想使用按钮的所有属性,我就必须声明所有这些?

如果有另一种无需用户控制的方法并且它是正确的方法,如果您能回答,我将不胜感激。 (谷歌翻译,抱歉)

用户控制:

<UserControl x:Class="UserControls.UserControl01"
                 ...
                 >
        <Grid>
            <Button x:Name="uc_btn" />
            <TextBox x:Name="uc_txt"  />
            <DataGrid x:Name="uc_dtg"  />
        </Grid>
    </UserControl>

使用 UserControl 的代码:

<Window x:Class="UserControls.wnd02"
        ...
        >
    <Grid>
        <local:UserControl01 uc_btn.Background="Red" uc_txt.Margin="10" uc_dtg.BorderThickness="5" Margin="90" />

        <local:UserControl01 uc_btn.Background="Green" uc_txt.Margin="25" uc_dtg.BorderThickness="20" Margin="5" />
    </Grid>
</Window>

【问题讨论】:

    标签: wpf xaml user-controls dependency-properties


    【解决方案1】:

    按照你的要求去做是不常见的。

    让我们考虑一个用户控件,它旨在像一个单独的控件一样工作。例如时间选择器。这包含两个增加/减少小时和分钟的滑块。您还可以在小时和分钟文本框中改写,两个文本框之间有一个 :。

    这个用户控件是关于一个属性的。时间。你不在乎会议纪要的外部背景是什么。如果这发生了变化,则它是用户控件的内部。

    在这种情况下,您通常会向用户控件添加一个 TimeSpan 依赖属性,这是它外部使用的唯一东西。

    几乎所有商业 WPF 开发都使用 MVVM 模式,并且 TimeSpan 将绑定到父视图的视图模型中的属性。

    这是一种情况。

    另一个是用户控件封装了一堆 UI,然后可以重用。

    样式具有范围,因此当您将样式应用于窗口中的按钮时,该样式将应用于其中的用户控件中的任何按钮。设置它们的属性。

    还有一些被标记为“继承”的依赖属性,其值会沿着可视化树传播。

    DataContext 就是其中之一,大多数团队都会使用它来处理用户控件中的属性。

    使用 MVVM 会有一个 MainWindowViewModel。

    那将有(比如说)一个 ChildUserControlViewModel 属性。这将与使用数据模板指定数据类型的用户控件相关联。

    然后,您可以使用 RelativeSource 绑定将用户控件中的任何内容的属性绑定到 ChildUserControlViewModel 的属性或 MainWindowViewModel 的属性。

    ViewModel first 是 WPF 的常见导航和组合模式。您应该能够找到许多博客比我在 SO 帖子中更好地解释它。

    这是一个:

    https://social.technet.microsoft.com/wiki/contents/articles/30898.simple-navigation-technique-in-wpf-using-mvvm.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多