繁体   English   中英

如何将DependencyProperty值应用于子级用户控件?

[英]How to apply DependencyProperty values to child user controls?

我在StackPanel中具有相同的自定义用户控件的多个实例。 每个实例都需要相同的DependencyProperty“ ControlWidth”。 我不想在每个用户控件中设置相同的属性,而只想在父StackPanel中设置一次

 <StackPanel>
      <propwin:PropertyEditControl Label="First" ControlWidth="180" />
      <propwin:PropertyEditControl Label="First" ControlWidth="180" />
      ...
 </StackPanel>

我以前是通过Style属性做到这一点的

 <StackPanel>
      <StackPanel.Resources>
             <Style TargetType="{x:Type propwin:PropertyEditControl}">
                  <Setter Property="ControlWidth" Value="180" />
             </Style>
       </StackPanel.Resources>

       <propwin:PropertyEditControl Label="First" />
       <propwin:PropertyEditControl Label="Second" />
       ...
 </StackPanel>

更新:感谢Anatoliy,他提到我的代码(我在此处显示的代码)应该可以工作。 我现在找出问题所在。 在我的PropertyEditControl.xaml中,我定义了一种验证样式:

<UserControl x:Class="MyModule.PropertyEditControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:local="clr-namespace:MyModule">

 <UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/MyModule;component/UI/ResourceDictionaries/ResourceLibrary.xaml" />
        </ResourceDictionary.MergedDictionaries>

        <Style TargetType="local:PropertyEditControl">
            <Setter Property="Validation.ErrorTemplate" Value="{StaticResource ValidationErrorTemplate}" />
        </Style>

        <Style x:Key="PropertyNameStyle" TargetType="DockPanel">
            <Setter Property="Width" Value="{Binding ControlWidth}" />
            <Setter Property="DockPanel.Dock" Value="Left" />
        </Style>

...

如果删除<Style TargetType="local:PropertyEditControl">样式,它将起作用!

原来,我原来的方法应该行得通。 尚未归因于用户控件中样式资源的原因。 无论如何,对我的第一个问题的正确答案是:若要只为多个控件设置DependencyProperty值一次,则必须在容器样式定义中设置它:

<StackPanel>
    <StackPanel.Resources>
         <Style TargetType="{x:Type propwin:PropertyEditControl}">
              <Setter Property="ControlWidth" Value="180" />
         </Style>
     </StackPanel.Resources>

     <propwin:PropertyEditControl Label="First" />
     <propwin:PropertyEditControl Label="Second" />
     ...
</StackPanel>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM