在Wpf应用程序中,我有一个主窗口。 我已将用户控件添加到同一项目中。 在用户控件的.xaml.cs文件中,添加了Dependency属性(属性的“Value”名称)。
我想访问usercontrol.xaml中定义的依赖项属性。 我知道我可以在window.xaml或其他一些用户控件中创建控件实例时也这样做。
但是可以在.xaml中访问.xaml.cs中定义的依赖项属性吗?
根据Vivs回答更新问题
确定。我错误地提到了我的问题。尽管如此,即使我不知道访问。但我实际想要的问题是可以从.xaml设置依赖属性。有点像上面给出的例子,
<Grid CustomBackground ="{Binding Path= BackgroundColor}" />
或者
<Grid CustomBackground ="Blue" />
是否可以在相同的.xaml中设置这样的自定义依赖项属性?
答案 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;
}
<强>更新强>
对于新问题,
不太直接。
<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”之类的内容,以明确表示它不适合直接使用。
UserControl1
的值。XAML:
UserControl.Style