2012-12-19 2 views
2

내가 텍스트 상자에 사용되는 사용자 정의 툴팁 컨트롤을 만들려고 노력하고 있어요에 유효성 검사를 통과하려고합니다.내 사용자 지정 도구 설명 제어

그것은 다음과 같을 것이다 : 나는 가능한 한 좋은 멀리 짐프 한 배경 구성 요소에서 오는 약간의 픽셀을 제외하고

enter image description here

.... 문제는 내 사용자 지정 컨트롤의 뒤에 코드가 결코 검증 객체 (즉 generic.xaml을에 트리거를 통해 전달되어야한다) 얻을 수 없다는 것입니다 How to implement Balloon message in a WPF application

:에서

아이디어는 온다.

왜 안 되니?

generic.xaml을 : 당신이 본대로

<Style TargetType="{x:Type TextBox}" x:Name="tb"> 
     <Setter Property="Width" Value="200" /> 
     <Setter Property="Background" Value="{StaticResource InputBackgroundColor}" /> 
     <Setter Property="BorderBrush" Value="{StaticResource InputBorderBrush}" /> 
     <Setter Property="HorizontalAlignment" Value="Left" /> 
     <Setter Property="Margin" Value="5,0,0,5" /> 
    <Style.Triggers> 
     <Trigger Property="Validation.HasError" Value="true"> 
     <Setter Property="ToolTip"> 
      <Setter.Value> 
      <Windows:ValidationBalloonPopupWindow 
       Validation="{Binding Path=Validation, ElementName=tb}" /> 
      </Setter.Value> 
     </Setter> 
     </Trigger> 
    </Style.Triggers> 
    </Style> 

, 나는 결핵의 경우 ElementName을 사용하여 유효성 검사를 참조하려고합니다. 템플릿과 같은 이름이 사용되지 않습니다. x : Key로 변경하면 모든 텍스트 상자가 10 픽셀 너비가됩니다. 아마 다른 말로 할 올바른 일은 아닙니다.

뒤에 코드, ValidationBalloonPopupWindow.xaml.cs : 실행해야 세터를 가지고

using System.Windows; 
using System.Windows.Controls; 

namespace Foo.ToolTips 
{ 
    public partial class ValidationBalloonPopupWindow : ToolTip 
    { 
     public ValidationBalloonPopupWindow() 
     { 
      InitializeComponent(); 
     }  

     public static DependencyProperty ValidationProperty 
      = DependencyProperty.Register("Validation", typeof(object), typeof(ValidationBalloonPopupWindow), 
       new PropertyMetadata(null, OnChangedValidationByBinding)); 

     private static void OnChangedValidationByBinding 
      (DependencyObject d, DependencyPropertyChangedEventArgs e) 
     { 
      ((ValidationBalloonPopupWindow)d).OnChangedValidationByBinding(e.NewValue); 
     } 
     public void OnChangedValidationByBinding(object newValue) 
     { 
      txtMessage.Text = newValue.GetType().Name; 
     } 

     private object _validation; 
     public object Validation 
     { 
      get 
      { 
       return _validation; 
      } 
      set 
      { 
       _validation = value; 
       txtMessage.Text = _validation.GetType().Name; 
      } 
     } 
    } 
} 

, 나는 성공없이이 파일에 중단 점을 많이 넣어 위해 노력했다.

컨트롤 자체에 대한 XAML, ValidationBalloonPopupWindow.xaml :

<ToolTip x:Class="FRAM.Windows.ValidationBalloonPopupWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Background="Transparent" BorderBrush="Transparent" HasDropShadow="false" 
    Placement="Bottom" 
    Height="Auto" Width="Auto"> 
    <Grid Height="126" Width="453"> 
    <Border Margin="7,13,0,0" 
      CornerRadius="10,10,10,10" Grid.ColumnSpan="4" HorizontalAlignment="Left" Width="429" Height="82" VerticalAlignment="Top" Grid.RowSpan="2"> 
     <Border.Effect> 
     <DropShadowEffect Color="#FF474747" /> 
     </Border.Effect> 
     <Border.Background> 
     <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
      <GradientStop Color="#FF58C2FF" Offset="0" /> 
      <GradientStop Color="#FFFFFFFF" Offset="1" /> 
     </LinearGradientBrush> 
     </Border.Background> 
     <StackPanel Orientation="Vertical"> 
     <Label Content="Title" Height="31" HorizontalAlignment="Left" 
      Margin="12,8,0,0" Name="lblCaption" FontSize="16" FontWeight="Bold" /> 
     <TextBlock Margin="18,0,0,0" Name="txtMessage" Width="378" HorizontalAlignment="Left">Body</TextBlock> 
     </StackPanel> 
    </Border> 
    <Path Data="M25,25L10.9919,0.64 0.7,25" Fill="#FF58C2FF" HorizontalAlignment="Left" 
     Margin="32,3,0,0" Stretch="Fill" Width="22" Height="10" VerticalAlignment="Top" /> 
    </Grid> 
</ToolTip> 

답변

2

가 대신 이름으로 참조하는 바인딩 RelativeSource를 사용하여 텍스트 상자 자체를 얻는다.
다음과 같이 시도하십시오.

<Setter Property="ToolTip"> 
    <Setter.Value> 
     <Windows:ValidationBalloonPopupWindow 
      Validation="{Binding RelativeSource={RelativeSource Self}, Path=Validation}" /> 
    </Setter.Value> 
</Setter> 
관련 문제