2017-12-12 3 views
1

私はエラーメッセージを表示するアドレナを持っています。問題は、ウィンドウが小さくても、ウィンドウの下でメッセージが切り詰められることです。 私は、ウィンドウのサイズに応じて、またはユーザーがウィンドウのサイズを変更した場合、ボタンまたは左にadornerを再配置しようとしています。ウィンドウのサイズを変更するときにアドフォナーの位置を変更するにはどうすればよいですか?

テキストボックス:

<TextBox IsReadOnly="False" Grid.Column="3" Grid.Row="0" Text="{Binding TextValue}" /> 

スタイル:

<ControlTemplate x:Key="errorToolTipTemplate"> 
    <ControlTemplate.Resources> 
     <Style x:Key="textblockErrorTooltip" TargetType="TextBlock"> 
      <Setter Property="HorizontalAlignment" Value="Center" /> 
      <Setter Property="VerticalAlignment" Value="Center" /> 
      <Setter Property="FontWeight" Value="Bold" /> 
      <Setter Property="Foreground" Value="White" /> 
      <Setter Property="Margin" Value="10 0 10 0" /> 
     </Style> 
    </ControlTemplate.Resources> 
    <DockPanel LastChildFill="true"> 
     <Border Height="Auto" Margin="4,0,0,0" Background="Tomato" BorderBrush="Black" BorderThickness="1" CornerRadius="2" DockPanel.Dock="Right"> 
      <TextBlock Style="{StaticResource textblockErrorTooltip}" Text="{Binding ElementName=customAdorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}" /> 
     </Border> 
     <AdornedElementPlaceholder Name="customAdorner"> 
      <Border BorderBrush="Red" BorderThickness="1" /> 
     </AdornedElementPlaceholder> 
    </DockPanel> 
</ControlTemplate> 

<Style TargetType="{x:Type TextBox}"> 
    <Setter Property="Width" Value="120" /> 
    <Setter Property="HorizontalAlignment" Value="Left" /> 
    <Setter Property="Margin" Value="0,2,4,2" /> 
    <Setter Property="Validation.ErrorTemplate" Value="{DynamicResource errorToolTipTemplate}" /> 
    <!--<Setter Property="FontSize" Value="8" />--> 
    <Setter Property="Background" Value="{DynamicResource entryFieldsBrush}" /> 
    <Style.Triggers> 
     <Trigger Property="IsReadOnly" Value="True"> 
      <Setter Property="Background" Value="{StaticResource windowBrush}" /> 
     </Trigger> 
     <Trigger Property="Validation.HasError" Value="True"> 
      <Setter Property="ToolTip" Value="{Binding Path=(Validation.Errors)[0].ErrorContent, RelativeSource={x:Static RelativeSource.Self}}" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

enter image description here

+0

コントロールのマージンを指定しようとしましたか? – mm8

+0

@ mm8私は、テキストボックスとスタイルに使用している正確なコードを含む質問を更新しました。私は余白とテンプレートの位置を更新しようとしました – IBRA

+0

それは私の質問に答えることはありません。 TextBlockに十分な大きさの右マージンを設定した場合、クリップされてはなりません。 – mm8

答えて

0

は私のために行くための方法でした。このリンクhereには、ポップアップエラーメッセージの実例があります。

ポップアップ制御 指定された要素又はスクリーン座標への現在のアプリケーションのウィンドウ相対にわたって浮かぶ別 ウィンドウにコンテンツを表示する方法を提供します。このトピックでは、 ポップアップコントロールについて説明し、その使用方法について説明します。 source

0

あなたがクリップされますからadorner層を防ぐために飾られた要素の右マージンを設定することができます。あなたが動的にこのことができるようにしたい場合は

、あなたは、例えばErrorTemplateTextBlockためLoadedイベントを処理し、TextBlockActualWidthプラスいくつかのオフセット、例えばに飾ら要素のMarginを設定できます

使用 popups
<DockPanel LastChildFill="true"> 
    <Border Height="Auto" Margin="4,0,0,0" Background="Tomato" BorderBrush="Black" BorderThickness="1" 
      CornerRadius="2" DockPanel.Dock="Right"> 
     <TextBlock Text="{Binding ElementName=customAdorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}" 
        Loaded="TextBlock_Loaded"/> 
    </Border> 
    <AdornedElementPlaceholder Name="customAdorner"> 
     <Border BorderBrush="Red" BorderThickness="1" /> 
    </AdornedElementPlaceholder> 
</DockPanel> 

private void TextBlock_Loaded(object sender, RoutedEventArgs e) 
{ 
    TextBlock tb = sender as TextBlock; 
    Border border = tb.Parent as Border; 
    DockPanel dockPanel = border.Parent as DockPanel; 
    AdornedElementPlaceholder aph = dockPanel.Children[1] as AdornedElementPlaceholder; 
    FrameworkElement adornedElement = aph.AdornedElement as FrameworkElement; 
    adornedElement.Margin = new Thickness(0, 0, tb.ActualWidth + 10.0, 0); 
} 
関連する問題