资源控件中的 WPF 元素绑定(bind)不起作用

标签 wpf data-binding resources

我有一些 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/

相关文章:

c# - 使用 StaticResource 作为 MarkupExtension 的参数导致 WPF 中的 NullReferenceException

wpf - 如何更改WPF日期选择器的图标?

c# - 数据绑定(bind)到 WinForm

javascript - 关于性能的最佳方法是什么: setInterval() or a global event on body?

c# - 我应该创建什么而不是 Bootstrap ? Prism 6.1.0

wpf - 不同库中 ViewModel 和 View 之间的中介者模式

ios - Rx swift : Two way binding

c# - 简单数据绑定(bind)

java - 为什么项目布局资源与 Java 源代码分开?

c++ - 右键单击不可见 DLL 中的版本资源