WPF绑定到父窗口中的元素

7
我正在尝试将子控件中的元素属性绑定到父窗口中的元素属性,但它不起作用。
以下是我尝试做的事情的PNG图像: enter image description here 以下是不起作用的XAML代码:
CurrentDate="{Binding ElementName=TimeBar, Path=SelectionStart,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}" 

感谢您的选择。

2
你不能同时使用 ElementNameRelativeSource - Arian Motamedi
2
使用ElementName不需要使用RelativeSource,省略RelativeSource即可正常工作。 - S2S2
如果我省略了RelativeSource,就不会再出现异常。但是输出窗口会打印一个错误信息:“System.Windows.Data Error: 4 : Cannot find source for binding with reference 'ElementName=TimeBar'”。 - Slime recipe
3个回答

4

在您的用户控件中创建一个依赖属性,然后在窗口中绑定它

就像这样:您可以在stackoverflow上找到所有的DependencyProperty实现。

<YourUsercontrol x:Name="uc">
  <YourSomeControl CurrentDate="{Binding ElementName=uc, Path=MyDp}"/>
 </YourUsercontrol>

XAML窗口

 <Window>
   <ElementInParent x:Name="eip" />
   <YourUsercontrol MyDp="{Binding ElementName=eip, Path=PropertyFromElementInParent}"/>

这是一些关于编程的相关内容:这里有一些好的信息:https://dev59.com/v2gu5IYBdhLWcg3wln4O - blindmeis
是的,这很简单且有效。非常感谢。 - Slime recipe

0

使用ElementName和RelativeSource绑定不是正确的方法。此外,由于两者位于不同的XAML中,UserControl不知道父级的ElementName。

一种方法是将用户控件的数据上下文设置为要绑定到的元素名称,然后使用普通绑定路径。

如下面的示例所示: 在主窗口中,我们有一个文本框和一个用户控件。 我们正在使用文本框设置用户控件的数据上下文。

在用户控件中,我们绑定DataContext的Text属性(实质上是主窗口的TextBox)。

<Window
     xmlns:self="clr-namespace:experiments"
     >
    <StackPanel>
        <TextBox x:Name="Name" Width="100"/>
        <self:UserControl1 DataContext="{Binding ElementName=Name}"/>
    </StackPanel>
</Window>



<UserControl x:Class="experiments.UserControl1">
    <Grid>
        <TextBlock Text="{Binding Path=Text}" Width="100" Background="AliceBlue" Height="50"/>
    </Grid>
</UserControl>

如果它不是用户控件,而是绑定到父窗口属性的子窗口呢? - Epirocks
我认为这通常应该可以工作,但我必须检查以确保并回复。这里的一个假设是子窗口是模态对话框。 - bhavik shah

0
基于以下答案LINK,SelectionStart默认情况下不是可绑定属性,因此您需要创建一个附加行为或类似的东西。

在这种情况下,它是一个可绑定属性,因为当两个元素在同一个控件中时,它可以工作。 - Slime recipe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接