2017-09-03 87 views
0

我有以下的ControlTemplate,如下图所示,我想避免硬编码的图像的HIGHT和宽度,而不是我想图像控件的高度和宽度结合模板内绑定

<Image Source="/Rotate.Pictures;component/Images/error.png" 
     Stretch="Uniform" 
     HorizontalAlignment="Stretch" 
     VerticalAlignment="Stretch" 
     Height="14" 
     Width="14"/> 

给TextBlock的Text(TextBlock named“ErrorText”)属性path =“Height”。图像的高度和宽度都应该绑定到TextBlock的文本高度属性的高度值

有谁知道我该如何实现这一目标?

模板:

<Grid IsSharedSizeScope="True"> 
    <Grid.Resources> 
     <Style TargetType="{x:Type TextBox}"> 
      <Setter Property="Validation.ErrorTemplate"> 
       <Setter.Value> 
        <ControlTemplate> 
         <StackPanel> 
          <AdornedElementPlaceholder> 
           <Border BorderBrush="Red" BorderThickness="2"/> 
          </AdornedElementPlaceholder> 
          <ItemsControl ItemsSource="{Binding}"> 
           <ItemsControl.ItemTemplate> 
            <DataTemplate> 
             <StackPanel Orientation="Horizontal"> 
              <Image Source="/Rotate.Pictures;component/Images/error.png" Stretch="Uniform" HorizontalAlignment="Stretch" 
                VerticalAlignment="Stretch" 
                Height="14" 
                Width="14"/> 
              <TextBlock x:Name="ErrorText" Text="{Binding ErrorContent}" Foreground="Red"/> 
             </StackPanel> 
            </DataTemplate> 
           </ItemsControl.ItemTemplate> 
          </ItemsControl> 
         </StackPanel> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </Grid.Resources> 
+0

之前指定Grid.Column 1我猜你真正想要的是在ErrorContent一个DataTrigger那台图像可见性在ErrorContent不为空时可见。 – Clemens

回答

0

关键的答案是引用过去(对照的是,执行线程在 “{绑定的ElementName = ERRORTEXT,路径=的ActualHeight}” 已经遇到过)。因此,该解决方案采用一个网格,然后指定Grid.Column 0引用的ElementName在Grid.Column 1

 <Style TargetType="{x:Type TextBox}"> 
      <Setter Property="Validation.ErrorTemplate"> 
       <Setter.Value> 
        <ControlTemplate> 
         <StackPanel> 
          <AdornedElementPlaceholder> 
           <Border BorderBrush="Red" BorderThickness="2"/> 
          </AdornedElementPlaceholder> 
          <ItemsControl ItemsSource="{Binding}"> 
           <ItemsControl.ItemTemplate> 
            <DataTemplate> 
             <Grid> 
              <Grid.ColumnDefinitions> 
               <ColumnDefinition Width="Auto" /> 
               <ColumnDefinition Width="*" /> 
              </Grid.ColumnDefinitions> 
              <TextBlock x:Name="ErrorText" Grid.Column="1" Text="{Binding ErrorContent}" Foreground="Red"/> 
              <Image Grid.Column="0" Source="/Rotate.Pictures;component/Images/error.png" 
                Height="{Binding ElementName=ErrorText, Path=ActualHeight}" 
                Width="{Binding ElementName=ErrorText, Path=ActualHeight}"/> 
             </Grid> 
            </DataTemplate> 
           </ItemsControl.ItemTemplate> 
          </ItemsControl> 
         </StackPanel> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style>