在同一控件xaml中访问依赖项属性

时间:2013-07-04 10:57:25

标签: wpf c#-4.0 wpf-controls c#-3.0

在Wpf应用程序中,我有一个主窗口。 我已将用户控件添加到同一项目中。 在用户控件的.xaml.cs文件中,添加了Dependency属性(属性的“Value”名称)。

我想访问usercontrol.xaml中定义的依赖项属性。 我知道我可以在window.xaml或其他一些用户控件中创建控件实例时也这样做。

但是可以在.xaml中访问.xaml.cs中定义的依赖项属性吗?

根据Vivs回答更新问题

确定。我错误地提到了我的问题。尽管如此,即使我不知道访问。但我实际想要的问题是可以从.xaml设置依赖属性。有点像上面给出的例子,

<Grid CustomBackground ="{Binding Path= BackgroundColor}" />

或者

<Grid CustomBackground ="Blue" />

是否可以在相同的.xaml中设置这样的自定义依赖项属性?

1 个答案:

答案 0 :(得分:9)

是的,这是可能的。

类似的东西:

<强>的.xaml

<UserControl x:Class="MvvmLight26.UserControl1"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:local="clr-namespace:MvvmLight26"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             mc:Ignorable="d">
  <Grid Background="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:UserControl1}}, Path=CustomBackground}" />
</UserControl>

.xaml.cs

public partial class UserControl1 : UserControl {
  public static readonly DependencyProperty CustomBackgroundProperty =
    DependencyProperty.Register(
      "CustomBackground",
      typeof(Brush),
      typeof(UserControl1),
      new FrameworkPropertyMetadata(Brushes.Tomato));

  public UserControl1() {
    InitializeComponent();
  }

  public Brush CustomBackground {
    get {
      return (Brush)GetValue(CustomBackgroundProperty);
    }
    set {
      SetValue(CustomBackgroundProperty, value);
    }
  }
}

<强>替代:

如果您说DataContext的{​​{1}}本身就像:

UserControl

然后在你的xaml中你可以选择:

public UserControl1() {
  InitializeComponent();
  DataContext = this;
}

<强>更新

对于新问题,

不太直接。

  • 如果将自定义DP注册为附加属性,则可以“设置”该值(请记住附加属性与其行为和范围中的普通DP不同。)
  • 如果您想将其保留为普通DP,那么您可以保留<Grid Background="{Binding Path=DataContext.CustomBackground}" /> 与原始答案相同(只是DP部分。您需要删除它的xaml部分并使其成为代码隐藏中的非部分类,然后将其派生为新的UserControl1

类似的东西:

UserControl

您可以将<local:UserControl1 x:Class="MvvmLight26.UserControl2" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:MvvmLight26" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" CustomBackground="Blue" mc:Ignorable="d"> <Grid /> </local:UserControl1> 命名为“BaseUserControl”之类的内容,以明确表示它不适合直接使用。

  • 您也可以在同一个xaml中设置UserControl1的值。

XAML:

UserControl.Style