WPF 用户控件将数据绑定到用户控件属性

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/18461660/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-08 23:55:31  来源:igfitidea点击:

WPF user control bind data to user control property

wpfbindinguser-controlscontrols

提问by user1736332

I have user control:

我有用户控制:

xaml

xml

<UserControl x:Class="controlmaker.checkButton"
         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="114" d:DesignWidth="221">
<Grid Background="Aqua" >
    <CheckBox Content="CheckBox" Height="16" HorizontalAlignment="Left" Margin="58,24,0,0" Name="checkBox1" VerticalAlignment="Top" />
    <Button Content="{Binding buttText}" Height="23" HorizontalAlignment="Left" Margin="58,57,0,0" Name="button1" VerticalAlignment="Top" Width="75" />
</Grid>
</UserControl>

code behind

背后的代码

public partial class checkButton : UserControl
{
    public checkButton()
    {
        InitializeComponent();
    }


    public static readonly DependencyProperty buttTextProperty =
DependencyProperty.Register("buttText", typeof(String),
typeof(checkButton), new FrameworkPropertyMetadata(string.Empty));

    public String buttText
    {
        get { return GetValue(buttTextProperty).ToString(); }
        set { SetValue(buttTextProperty, value); }
    }


}

and main window xaml

和主窗口 xaml

<Window x:Class="controlmaker.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525" xmlns:my="clr-namespace:controlmaker">
<Grid>
    <my:checkButton buttText="aka"  HorizontalAlignment="Left" Margin="145,115,0,0" x:Name="checkButton1" VerticalAlignment="Top" Height="133" Width="250" />
</Grid>
</Window>

I want to bind user control property in window xaml and bind it in user control to button content property. How to do it?

我想在窗口 xaml 中绑定用户控件属性并将其在用户控件中绑定到按钮内容属性。怎么做?

回答by vitaliy zadorozhnyy

You can try Element binding inside the user control. Just give a name to UserControl and bind property:

您可以在用户控件中尝试 Element 绑定。只需为 UserControl 命名并绑定属性:

<UserControl x:Class="controlmaker.checkButton"
         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="114" d:DesignWidth="221"
         x:Name="MyUserControl">
<Grid Background="Aqua" >
    <CheckBox Content="CheckBox" Height="16" HorizontalAlignment="Left"
          Margin="58,24,0,0" Name="checkBox1" VerticalAlignment="Top" />
    <Button Content="{Binding Path=buttText, ElementName=MyUserControl}"
          Height="23" HorizontalAlignment="Left" Margin="58,57,0,0" 
          Name="button1" VerticalAlignment="Top" Width="75" />
</Grid>
</UserControl>

And then you can Bind or put static text from user control usage place

然后您可以从用户控件使用位置绑定或放置静态文本

<my:checkButton buttText="aka" />

or

或者

  <my:checkButton buttText="{Binding SomeProperty}" />