我有一些 xaml 只会将文本从一个文本框复制到另一个文本框:
<StackPanel Orientation="Horizontal">
<TextBox Width="100" Height="30" Text="{Binding ElementName=src1, Path=Text}" />
<TextBox x:Name="src1" Width="100" Height="30" />
</StackPanel>
没什么特别的,效果很好。有点愚蠢,但只是一个例子。
但是,如果我将 StackPanel 作为资源放在 Window 中并从代码动态创建,如下所示:
<Window.Resources>
<StackPanel x:Key="MySP" Orientation="Horizontal">
<TextBox Width="100" Height="30" Text="{Binding ElementName=src, Path=Text}"/>
<TextBox x:Name="src" Width="100" Height="30" />
</StackPanel>
</Window.Resources>
..然后元素绑定(bind)不再起作用。
为什么?以及如何使其工作?任何想法都非常感激。
最佳答案
以下 Xaml 应该可以正常工作
<Window ...>
<Window.Resources>
<StackPanel x:Key="MySP" Orientation="Horizontal">
<TextBox Width="100" Height="30" Text="{Binding ElementName=src, Path=Text}"/>
<TextBox x:Name="src" Width="100" Height="30" />
</StackPanel>
</Window.Resources>
<StaticResource ResourceKey="MySP"/>
</Window>
您也可以从代码中使用它
StackPanel mySP = TryFindResource("MySP") as StackPanel;
if (mySP != null)
{
this.Content = mySP;
}
但是,您拥有
StackPanel
的原因是什么?在 Windows 资源中?如果您希望能够多次重复使用它,则必须设置
x:Shared="False"
在资源上,但是你会得到一个异常,比如 Cannot register duplicate Name 'src' in this scope
第二次添加它。
关于资源控件中的 WPF 元素绑定(bind)不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7038041/