none
这句xaml绑定代码,怎么用c#代码做的绑定和绑定解除? RRS feed

  • 问题

  • {Binding RelativeSource={RelativeSource Mode= FindAncestor,  AncestorType={x:Type local:UserControl}}, Path=DependentPropertyName}

    这是在外部绑定UserControl的内部控件的属性的方式,依赖属性绑定UserControl的内容控件,通过依赖属性暴露给外部,外部只需绑定指定依赖属性名称即可。

    不过这个绑定过程怎么用c#做到如下例子

    在UserControl内部解除依赖属性与某个控件的width属性的绑定,然后又与该控件的Height建立绑定关联?


    • 已编辑 Trian555 2019年2月23日 7:51
    2019年2月23日 7:46

答案

  • Hi Trian555,

    根据你的描述, 你是想用C#来实现如下所示的绑定过程。

    {Binding RelativeSource={RelativeSource Mode= FindAncestor,  AncestorType={x:Type local:UserControl}}, Path=DependentPropertyName}

    我做了一个例子, 假定存在一个Textblock,实现绑定过程,你可以把Window换成你当前的界面。

     Binding b = new Binding();
                b.Path = new PropertyPath("DependentPropertyName");
                b.RelativeSource = new RelativeSource(RelativeSourceMode.FindAncestor,
                                                         typeof(Window8),1);
                textBlock.SetBinding(TextBlock.TextProperty, b);

    有关清楚绑定, 你可以参考一下下面的方法:

    BindingOperations.ClearBinding(textBlock, TextBlock.TextProperty);

    有关清楚绑定的官方文档, 请查看以下连接:

    https://docs.microsoft.com/zh-cn/dotnet/framework/wpf/data/how-to-clear-bindings

    Best Regards,

    Cherry


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 Trian555 2019年9月30日 8:04
    2019年2月25日 2:39
    版主

全部回复

  • 清除属性可以使用

    ClearValue方法

    使用代码可以用这样的方式来添加属性或者清除属性

    再绑定的时候 如果是附加属性或者依赖属性,

    则是你要使用添加的对象的SetValue的方法,参数1则是属性类的公开方法,参数2则是属性类的值

     <TextBox x:Name="tb" Grid.Row="2" Height="128" />
               
            <Button Click="Button_Click" Content="清除属性" Grid.Column="1" Margin="10,104,84,157" Grid.Row="1"/>
            <Button Click="Button_Click_1" Content="添加属性" Margin="10,10,84,253" Grid.Row="1" Grid.Column="1"/>

        private void Button_Click(object sender, RoutedEventArgs e)
            {
                tb.ClearValue(TIGO.PoupProperty);
    
                
            }
    
            private void Button_Click_1(object sender, RoutedEventArgs e)
            {
                tb.SetValue(TIGO.PoupProperty, "HH");
            }


    • 已编辑 ARM830 2019年2月23日 11:13
    2019年2月23日 11:08
  • Hi Trian555,

    根据你的描述, 你是想用C#来实现如下所示的绑定过程。

    {Binding RelativeSource={RelativeSource Mode= FindAncestor,  AncestorType={x:Type local:UserControl}}, Path=DependentPropertyName}

    我做了一个例子, 假定存在一个Textblock,实现绑定过程,你可以把Window换成你当前的界面。

     Binding b = new Binding();
                b.Path = new PropertyPath("DependentPropertyName");
                b.RelativeSource = new RelativeSource(RelativeSourceMode.FindAncestor,
                                                         typeof(Window8),1);
                textBlock.SetBinding(TextBlock.TextProperty, b);

    有关清楚绑定, 你可以参考一下下面的方法:

    BindingOperations.ClearBinding(textBlock, TextBlock.TextProperty);

    有关清楚绑定的官方文档, 请查看以下连接:

    https://docs.microsoft.com/zh-cn/dotnet/framework/wpf/data/how-to-clear-bindings

    Best Regards,

    Cherry


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 Trian555 2019年9月30日 8:04
    2019年2月25日 2:39
    版主