在WPF中公开对象的内部属性

时间:2012-03-09 15:56:57

标签: .net wpf xaml wpf-controls

我有以下UserControl

<UserControl 
           x:Class="MyUserControl"
           xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
           xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
           xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
           mc:Ignorable="d">
    <Grid>
        <Label Content="Label"
               Name="myLabel" />
    </Grid>
</UserControl>

我需要:
1)公开FontFamily的{​​{1}}属性,因为它是myLabel的属性。
2)*(真的可选)定义myLabel内容为“MyUserControl1”,“MyUserControl2”等,就像设计者在添加多个控件时所做的那样。

我应该如何公开那个属性,比如序数属性(?)或依赖属性(?)......

2 个答案:

答案 0 :(得分:0)

将它们公开为依赖项属性,实际上控件上的每个属性都应该作为依赖项属性公开。然后,您可以使用绑定将属性附加到Label.FontFamily属性:

public void MyUserControl()
{
    myLabel.SetBinding(Label.FontFamilyProperty, new Binding {
                                                          Path = "FontFamily",
                                                          Source = this,
                                                      });
}

FontFamily setter中的Path是您的媒体资源的名称。

P.S。:没有真正得到你的第二个问题。你能改写它还是提供一些样品?

答案 1 :(得分:0)

FontFamily在Control上声明,它是UserControl和Label的基础,是继承的DependencyProperty。因此,除非您覆盖Label上的FontFamily值(本地值,样式,触发器等),否则您已经可以在UserControl上设置FontFamily并使其显示在Label上而不执行任何其他操作。如果您需要在内部对其进行修改并将其推出以显示在UserControl上,则需要将UserControl的FontFamily绑定到Label,并使用Mode = TwoWay。

对于第二部分 - 您需要设置一些计数机制,该机制在创建实例时递增,可能作为控件内的静态字段。然后,您可以递增该值并将其应用于UserControl构造函数中的Label(这将取决于在每个会话期间在运行时加载顺序和变量)。