2009-08-17 7 views
0

나는 ToolTip을 보여주고 자하는 추상 UserControl을 가지고 있습니다. 이 ToolTip 파생 된 UserControls 정의 된 DataContext 형식에 따라 달라야합니다.Wpf의 DataContext DataType을 기반으로 다른 도구 설명을 표시하는 방법은 무엇입니까?

기본 클래스의 각 유형에 다른 ToolTip을 정의 할 수있는 방법이 있습니까? 그렇지 않다면 파생 된 UserControl에서 어떻게이 툴팁을 설정할 수 있습니까?

<UserControl ... 
    <UserControl.ToolTip> 
    <DataTemplate DataType="{x:Type Library:Event}"> 
     <StackPanel> 
     <TextBlock FontWeight="Bold" Text="{Binding Name}" /> 
     <TextBlock> 
      <TextBlock.Text> 
      <Binding Path="Kp" StringFormat="{}Kp: {0}m" /> 
      </TextBlock.Text> 
     </TextBlock> 
     </StackPanel> 
    </DataTemplate> 
    </UserControl.ToolTip> 
</UserControl> 

답변

1

당신이 유형에 대해 표시 할 정보를 반환하는 사용자 정의 ValueConverter를 작성할 수 없습니다 : 여기

내가 갈 것이라고 생각하는 방법이다?

당신이 제안하는 것과 같이 데이터 템플릿을 받아들이도록 변환기가 허용 할 수는 있지만이 방법으로 완전히 시나리오를 사용할 수 있습니다.

먼저 값 변환기를 만듭니다. 내 빠른 코드 용서 :

<UserControl.Resources> 
    <local:ToolTipConverter x:Key="toolTipConverter" /> 
</UserControl.Resources> 

그리고합니다 다음

public class ToolTipConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
{ 
    UIElement tip = null; 

    if (value != null) 
    { 
     // Value is the data context 
     Type t = value.GetType(); 
     string fancyName = "Unknown (" + t.ToString() + ")"; 

     // Can use IsInstanceOf, strings, you name it to do this part... 
     if (t.ToString().Contains("Person")) 
     { 
      fancyName = "My custom person type"; 
     }; 


     // Could create any visual tree here for the tooltip child 
     TextBlock tb = new TextBlock 
     { 
      Text = fancyName 
     }; 
     tip = tb; 
    } 

    return tip; 
} 

public object ConvertBack(object o, Type t, object o2, CultureInfo ci) 
{ 
    return null; 
} 

}

을 사용자 컨트롤의 자원을 인스턴스화 (나는이 네임 스페이스와 어셈블리로 "지역"는 XMLNS 정의) 사용자 정의 컨트롤의 루트 시각 도구가 해당 툴팁 속성을 바인딩하는지 확인하십시오.

<Grid 
    ToolTip="{Binding Converter={StaticResource toolTipConverter}}" 
    Background="Blue"> 
    <!-- stuff goes here --> 
</Grid> 
+0

감사합니다. 지금은 코드에서 시각적 트리를 만들어 보았습니다. 하지만이 응용 프로그램은 현지화해야하므로 xaml에서 템플릿을 정의 할 수 있기를 정말로 원합니다. 훨씬 쉽습니다. Converter가 템플릿을 허용하도록 어떻게합니까? 참조 링크를 가르쳐 주시겠습니까? –

+0

나는 그것을 결국 할 수 있었고 완벽하게 작동합니다. 감사합니다 .-) –

0

낡은 지위, 나는 오늘도 같은 문제에 직면 했으므로 여전히 내 대답을 게시 할 것입니다. 기본적으로 필자는 질문의 작성자처럼 모든 툴팁 템플리트를 자원에 넣는 것으로 끝 맺었습니다. 이 작업을 실제로 수행하려면 툴팁 내용과 리소스 섹션에 대한 바인딩이 누락되었습니다. 이것들을 사용하면 실제로 temlates가 적용됩니다.

<UserControl ... 
    <UserControl.ToolTip> 
    <Tooltip Content="{Binding}"> 
     <Tooltip.Resources> 
     <DataTemplate DataType="{x:Type Type1}"> 
      ... 
     </DataTemplate> 
     <DataTemplate DataType="{x:Type Type2}"> 
      ... 
     </DataTemplate> 
     </Tooltip.Resources> 
    </Tooltip> 
</UserControl> 
관련 문제