Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用户控件中的文本框,可以';无法从代码隐藏中编辑文本依赖项属性_C#_Wpf_Xaml_Data Binding_Dependency Properties - Fatal编程技术网

C# 用户控件中的文本框,可以';无法从代码隐藏中编辑文本依赖项属性

C# 用户控件中的文本框,可以';无法从代码隐藏中编辑文本依赖项属性,c#,wpf,xaml,data-binding,dependency-properties,C#,Wpf,Xaml,Data Binding,Dependency Properties,My UserControl包含一个文本框和一个按钮。TextBox的文本由名为X的依赖项属性正确填充 我的目标: 当我按下按钮时,更改X的值(例如文本框的文本) 我已将UserControl定义如下: <StackPanel Orientation="Horizontal" > <TextBox Name="Xbox" Text="{Binding Path=X}" Width="50"/> <Button Content="Current" Cl

My UserControl包含一个文本框和一个按钮。TextBox的文本由名为X的依赖项属性正确填充

我的目标: 当我按下按钮时,更改X的值(例如文本框的文本)

我已将UserControl定义如下:

<StackPanel Orientation="Horizontal" >
    <TextBox Name="Xbox" Text="{Binding Path=X}" Width="50"/>
    <Button Content="Current" Click="InsertCurrentBtnClick" />
</StackPanel>
我尝试了几种方法,一次一种(见下文
X=0.7;
),强制更新文本框文本,但迄今为止没有任何效果


提前谢谢。

我会这样写:

    public double X
    {
        get { return (double)GetValue(XProperty); }
        set { SetValue(XProperty, value); }
    }

    public static readonly DependencyProperty XProperty =
        DependencyProperty.Register("X", typeof(double), typeof(MainPage), new PropertyMetadata(new PropertyChangedCallback(Callback)));


    public static void Callback(DependencyObject o, DependencyPropertyChangedEventArgs e)
    {
        (o as MainPage).Xbox.Text = e.NewValue.ToString();
    }

    private void InsertCurrentBtnClick(object sender, RoutedEventArgs e)
    {
        X = 0.7;
    }
以及xaml代码:

    <StackPanel Orientation="Horizontal" >
        <TextBox Name="Xbox" Width="50"/>
        <Button Content="Current" Click="InsertCurrentBtnClick" />
    </StackPanel>

我会这样写:

    public double X
    {
        get { return (double)GetValue(XProperty); }
        set { SetValue(XProperty, value); }
    }

    public static readonly DependencyProperty XProperty =
        DependencyProperty.Register("X", typeof(double), typeof(MainPage), new PropertyMetadata(new PropertyChangedCallback(Callback)));


    public static void Callback(DependencyObject o, DependencyPropertyChangedEventArgs e)
    {
        (o as MainPage).Xbox.Text = e.NewValue.ToString();
    }

    private void InsertCurrentBtnClick(object sender, RoutedEventArgs e)
    {
        X = 0.7;
    }
以及xaml代码:

    <StackPanel Orientation="Horizontal" >
        <TextBox Name="Xbox" Width="50"/>
        <Button Content="Current" Click="InsertCurrentBtnClick" />
    </StackPanel>

您需要为控件设置
DataContext
。正如我在控件中定义的
X
一样,您需要执行以下操作:

    public MyUserControl()
    {
        InitializeComponent();

        // add this line
        this.DataContext = this;
    }

您需要为控件设置
DataContext
。正如我在控件中定义的
X
一样,您需要执行以下操作:

    public MyUserControl()
    {
        InitializeComponent();

        // add this line
        this.DataContext = this;
    }

尽管您也可以绑定它,但只需更改xaml:

<UserControl x:Class="SilverlightApplication1.MainPage"
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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Name="myWidnow"
d:DesignHeight="300" d:DesignWidth="400">

<Grid x:Name="LayoutRoot" Background="White">
    <StackPanel Orientation="Horizontal" >
        <TextBox Name="Xbox" Width="50" Text="{Binding ElementName=myWidnow, Path=X}" />
        <Button Content="Current" Click="InsertCurrentBtnClick" />
    </StackPanel>
</Grid>

请注意,我已将名称proeprty添加到UserControl。
在这种情况下,您不必更改代码behid中的任何内容。

不过,您也可以绑定它,只需更改xaml:

<UserControl x:Class="SilverlightApplication1.MainPage"
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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Name="myWidnow"
d:DesignHeight="300" d:DesignWidth="400">

<Grid x:Name="LayoutRoot" Background="White">
    <StackPanel Orientation="Horizontal" >
        <TextBox Name="Xbox" Width="50" Text="{Binding ElementName=myWidnow, Path=X}" />
        <Button Content="Current" Click="InsertCurrentBtnClick" />
    </StackPanel>
</Grid>

请注意,我已将名称proeprty添加到UserControl。
在这种情况下,您不必更改代码behid中的任何内容。

欢迎。DataContext和DataBinding一起工作:)哎呀,看来我很快就评估了这个答案。如果我使用它,我的X将不再作为依赖属性填充。它不会得到任何传递给它的值。DataContext和DataBinding一起工作:)哎呀,看来我很快就评估了这个答案。如果我使用它,我的X将不再作为依赖属性填充。它没有得到通过Oops传递给它的任何值,似乎我很快就评估了这个答案。如果我使用它,我的X将不再作为依赖属性填充。它不会得到传递给它的任何值,您还需要将值作为dependencProperty实现,或者实现INotigyPropertyChanged。使用UserConyrol的那个也需要使用DataContext.Oops,看来我很快就评估了这个答案。如果我使用它,我的X将不再作为依赖属性填充。它不会得到传递给它的任何值,您还需要将值作为dependencProperty实现,或者实现INotigyPropertyChanged。使用UserConyrol的用户还需要使用DataContext。