[英]WPF How to expose fields on a UserControl
我有一個只有窗口和用戶控件的簡單應用程序。 用戶控件具有一個列表框。 用戶控件位於窗口上,我想將用戶控件的列表框綁定到窗口數據上下文中的元素。
我已經找到的示例在用戶控件上具有CLR屬性,這些屬性可以通過代碼而不是通過XAML訪問。
<Window x:Class="WpfApplication2b.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:WpfApplication2b="clr-namespace:WpfApplication2b" Title="MainWindow" Height="410" Width="520">
<Grid>
<WpfApplication2b:MyUserControl></WpfApplication2b:MyUserControl>
</Grid>
這是用戶控件本身。
<UserControl x:Class="WpfApplication2b.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"
d:DesignHeight="300" d:DesignWidth="300">
<Grid Background="#FFD8AA13">
<ListBox Height="276" HorizontalAlignment="Left" Margin="12,12,0,0" Name="listBox1" VerticalAlignment="Top" Width="276" />
</Grid>
如您所見,它只是不同顏色背景上的一個列表框。 我不知道下一步要去:)
我猜想我需要在列表框的屬性后面添加代碼作為依賴項屬性嗎?
編輯:我已經添加了dependencyProperty,但我不明白我的意思。
public partial class MyUserControl : UserControl
{
public static readonly DependencyProperty ListBoxProperty;
static MyUserControl()
{
FrameworkPropertyMetadata md = new FrameworkPropertyMetadata();
MyUserControl.ListBoxProperty = DependencyProperty.Register("MyListBox", typeof (ListBox),
typeof (MyUserControl), md);
}
public ListBox MyListBox
{
get
{
return (ListBox) GetValue(ListBoxProperty);
}
set
{
SetValue(ListBoxProperty, value);
}
}
public MyUserControl()
{
InitializeComponent();
}
}
您的UserControl
將從Window繼承DataContext
,因此您可以綁定ListBox
上的屬性,就像在Window中聲明的一樣。 為了使控制更加靈活,你可以聲明依賴屬性從數據項DataContext
要使用(即ItemsSource
集合),並將它們傳遞到控制,而不是傳遞ListBox
出來 。
我認為這個問題/答案幾乎是您要尋找的。 本質上,您將需要制作一個依賴項屬性(使用AddOwner
注冊方法),並在ListBox
的ItemsSource
上設置DataBinding以掛鈎到Dependency屬性。 答案中的示例對ComboBox
執行相同的操作,對於ListBox
應幾乎相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.