Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF元素绑定在XAML中不起作用_Wpf_Xaml_Binding - Fatal编程技术网

WPF元素绑定在XAML中不起作用

WPF元素绑定在XAML中不起作用,wpf,xaml,binding,Wpf,Xaml,Binding,这应该相当简单和直接,但当从资源使用元素绑定时,它在XAML中不起作用。当直接在XAML中使用它时,它工作良好 资源: <Window.Resources> <StackPanel x:Key="panel"> <CheckBox x:Name="chkDefaultValue" Content="Default Value" IsChecked="{Binding ElementName=txtDef

这应该相当简单和直接,但当从资源使用元素绑定时,它在XAML中不起作用。当直接在XAML中使用它时,它工作良好

资源:

<Window.Resources>
    <StackPanel x:Key="panel">
        <CheckBox x:Name="chkDefaultValue" Content="Default Value"  
                  IsChecked="{Binding ElementName=txtDefaultValue, Path=Text.Length, Mode=OneWay}" />
        <TextBox x:Name="txtDefaultValue"
                  Text="{Binding DefaultValue, Mode=TwoWay, ValidatesOnDataErrors=True}"
                  IsEnabled="{Binding ElementName=chkDefaultValue, Path=IsChecked}" />
    </StackPanel>
</Window.Resources>
<StackPanel>
    <!-- BINDING NOT WORKING -->
    <ContentControl Content="{StaticResource panel}" />

    <!-- BINDING WORKING HERE -->
    <CheckBox x:Name="chkDefaultValue" Content="Default Value"  
              IsChecked="{Binding ElementName=txtDefaultValue, Path=Text.Length, Mode=OneWay}" />
    <TextBox x:Name="txtDefaultValue"
              Text="{Binding DefaultValue, Mode=TwoWay, ValidatesOnDataErrors=True}"
              IsEnabled="{Binding ElementName=chkDefaultValue, Path=IsChecked}" />
</StackPanel>

XAML:

<Window.Resources>
    <StackPanel x:Key="panel">
        <CheckBox x:Name="chkDefaultValue" Content="Default Value"  
                  IsChecked="{Binding ElementName=txtDefaultValue, Path=Text.Length, Mode=OneWay}" />
        <TextBox x:Name="txtDefaultValue"
                  Text="{Binding DefaultValue, Mode=TwoWay, ValidatesOnDataErrors=True}"
                  IsEnabled="{Binding ElementName=chkDefaultValue, Path=IsChecked}" />
    </StackPanel>
</Window.Resources>
<StackPanel>
    <!-- BINDING NOT WORKING -->
    <ContentControl Content="{StaticResource panel}" />

    <!-- BINDING WORKING HERE -->
    <CheckBox x:Name="chkDefaultValue" Content="Default Value"  
              IsChecked="{Binding ElementName=txtDefaultValue, Path=Text.Length, Mode=OneWay}" />
    <TextBox x:Name="txtDefaultValue"
              Text="{Binding DefaultValue, Mode=TwoWay, ValidatesOnDataErrors=True}"
              IsEnabled="{Binding ElementName=chkDefaultValue, Path=IsChecked}" />
</StackPanel>


如何修复它?

您应该使用
DataTemplate

<Window.Resources>
    <DataTemplate DataType="{x:Type ContentControl}" x:Key="panel">
       <StackPanel>
             <CheckBox x:Name="chkDefaultValue" Content="Default Value"  
              IsChecked="{Binding ElementName=txtDefaultValue, Path=Text.Length, Mode=OneWay}" />
             <TextBox x:Name="txtDefaultValue"
              Text="{Binding DefaultValue, Mode=TwoWay, ValidatesOnDataErrors=True}"
              IsEnabled="{Binding ElementName=chkDefaultValue, Path=IsChecked}" />
       </StackPanel>
    </DataTemplate>
</Window.Resources>



未检查,但可能有效,您可以使用ControlTemplate

<Window.Resources>
    <ControlTemplate x:Key="panel">
        <StackPanel>
            <CheckBox x:Name="chkDefaultValue"
                      Content="Default Value"
                      IsChecked="{Binding ElementName=txtDefaultValue,
                                          Path=Text.Length,
                                          Mode=OneWay}" />
            <TextBox x:Name="txtDefaultValue"
                     IsEnabled="{Binding ElementName=chkDefaultValue,
                                         Path=IsChecked}"
                     Text="{Binding DefaultValue,
                                    Mode=TwoWay,
                                    ValidatesOnDataErrors=True}" />
        </StackPanel>
    </ControlTemplate>
</Window.Resources>