-1

我见过类似的问题,但我仍然无法满足我的需要。我需要通过用户控件内的标签输出复选框的名称:

Window1.xaml:

<Window x:Class="WpfBinding.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WpfBinding" Title="Window1" Height="300" Width="300">
    <Grid>
        <CheckBox Name="checkBox1">
            <local:UserControl1></local:UserControl1>
        </CheckBox>
    </Grid>    
</Window>

用户控件1.xaml:

<UserControl x:Class="WpfBinding.UserControl1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Canvas>
        <Label Content="{Binding ElementName=checkBox1, Path=Name}"></Label>
    </Canvas>
</UserControl>

如何正确执行?我缺乏什么知识?感谢帮助。

4

2 回答 2

1

ElementName绑定在same XAML scope. 这将起作用 -

 <Grid>
    <CheckBox Name="checkBox1"/>
    <Label Content="{Binding ElementName=checkBox1, Path=Name}"/>
</Grid>

但是,如果您想在不同的 UserControl 中执行此操作,则必须稍微调整一下代码并使用Tag来保存名称 -

 <Grid>
    <CheckBox Name="checkBox1">
        <local:UserControl1 Tag="{Binding ElementName=checkBox1, Path=Name}"/>
    </CheckBox>
</Grid>

用户控件.xaml

<Canvas>
    <Label Content="{Binding Path=Tag, RelativeSource={RelativeSource
                       Mode=FindAncestor, AncestorType=UserControl}}"/>
</Canvas>

在旁注中,在您的 中UserControl,您知道您需要绑定,ElementName = checkBox1而这只是您绑定的名称。它相当于 -

<Label Content="checkBox1"/>
于 2013-07-27T07:17:44.757 回答
1

上述解决方案将起作用,但针对此特定问题的更直接解决方案是在您的用户控件中使用 RelativeSource 绑定,如下所示:

<Canvas>
     <Label Content="{Binding RelativeSource={RelativeSource AncestorType=CheckBox, AncestorLevel=1}, Path=Name}"></Label>
</Canvas>

希望这是你需要的!!!

于 2013-07-29T07:00:03.790 回答