2017-12-12 13 views
1

나는 오류 메시지를 보여줄 수있는 adorner가 있으며 창문이 작을 때 창 아래에 메시지가 잘리는 문제가 있습니다. 그래서 adorner를 창 크기에 따라 단추 또는 왼쪽으로 다시 놓으려는 중이거나 사용자가 창 크기를 조정 한 경우.창 크기를 조정할 때 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); 
}