2017-09-03 7 views
0

内バインディング私は、次のControlTemplateを持っている、と私はハード画像の絶頂と幅をコーディング避けたい、代わりに私は身長とImageコントロール、以下に示すように、テンプレート

の幅をバインドしたいと思います
<Image Source="/Rotate.Pictures;component/Images/error.png" 
     Stretch="Uniform" 
     HorizontalAlignment="Stretch" 
     VerticalAlignment="Stretch" 
     Height="14" 
     Width="14"/> 

to TextBlockのテキスト(TextBlock "ErrorText")プロパティpath = "Height"。画像の高さと幅の両方をTextBlockのText HeightプロパティのHeight値にバインドする必要があります

私はこれをどのように達成できますか?

テンプレート:

<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

私はあなたが実際に何をしたいと思います設定ErrorContentにDataTriggerですErrorContentが空でない場合に画像が可視に表示されます。 – Clemens

答えて

0

回答の鍵は、過去の対照(実行のスレッドが既に "{バインディングのElementName = ERRORTEXT、PATH = ActualHeight}" に遭遇した制御)を参照することです。だから、解決策は、グリッドを使用して、その後、Grid.Column 0を指定する前にGrid.Column 1を指定Grid.Column 1でのElementNameを参照する

 <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> 
関連する問題