簡體   English   中英

WPF如何公開UserControl上的字段

[英]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注冊方法),並在ListBoxItemsSource上設置DataBinding以掛鈎到Dependency屬性。 答案中的示例對ComboBox執行相同的操作,對於ListBox應幾乎相同。

公開內部控件屬性以在WPF中進行綁定

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM