2009-07-12 20 views
20

मेरे पास सीमित आकार के नियंत्रण के अंदर टेक्स्टब्लॉक है। यदि पाठ नियंत्रण में फिट होने के लिए बहुत लंबा है, तो मैं पूर्ण पाठ के साथ टूलटिप दिखाना चाहता हूं। यह एक क्लासिक व्यवहार है जिसे आप निश्चित रूप से कई ऐप्स से जानते हैं।यदि आवश्यक हो तो WPF टूलटिप दिखाएं

मैंने टेक्स्टबॉक चौड़ाई को टूलटिप की दृश्यता में परिवर्तित करने के लिए कनवर्टर का उपयोग करने का प्रयास किया।

public object Convert(object value, ... 

'मान' databound आइटम है:

<GridViewColumn.CellTemplate> 
    <DataTemplate> 
     <TextBlock Text="{Binding Text}"> 
      <TextBlock.ToolTip> 
       <ToolTip 
        DataContext="{TemplateBinding Content}" 
        Visibility="{Binding Converter={StaticResource visConvert}}"> 

         <TextBlock Text="{Binding Text}"></TextBlock> 
       </ToolTip> 
      </TextBlock.ToolTip> 
     </TextBlock> 
    </DataTemplate> 
</GridViewColumn.CellTemplate> 

समस्या कनवर्टर में है। मैं 'वैल्यू' को टेक्स्टब्लॉक होना चाहता हूं, इसकी चौड़ाई का निरीक्षण करने के लिए, और इसकी तुलना ग्रिड व्यू कॉलम। विथथ से करें।

उत्तर

28

मैं इसे समझ से बाहर, टूलटिप PlacementTarget संपत्ति है कि यूआई तत्व यह है कि उपकरण युक्ति है निर्दिष्ट करता है। मामले में किसी को भी इसकी आवश्यकता है:

<TextBlock Text="{Binding Text}"> 
    <TextBlock.ToolTip> 
     <ToolTip 
      DataContext="{Binding Path=PlacementTarget, RelativeSource={x:Static RelativeSource.Self}}" 
      Visibility="{Binding Converter={StaticResource toolVisConverter}}"> 
      <TextBlock Text="{Binding Text}"/> <!-- tooltip content --> 
     </ToolTip> 
    </TextBlock.ToolTip> 
</TextBlock> 

और फिर एक कनवर्टर है कि (TextBlock चौड़ाई के आधार पर) दृश्यता को TextBlock धर्मान्तरित लिखें।

0

मुझे लगता है कि आपको इस समस्या को हल करने के लिए ControlTemplate ट्रिगर को देखना होगा। दुर्भाग्यवश ControlTemplate ट्रिगर हमेशा एक विशिष्ट मान से तुलना करते हैं, उससे कम या उससे अधिक नहीं। आप इसे प्रकट कर सकते हैं उदा। यदि चौड़ाई = 100, चौड़ाई < 100.

6

ठीक है, तो यह मुश्किल XAML-only तरीका क्यों है? यह काम करता है:

<TextBlock Text="{Binding Text}" 
    IsMouseDirectlyOverChanged="TextBlock_IsMouseDirectlyOverChanged" > 
    <TextBlock.ToolTip> 
    <ToolTip Visibility="Collapsed"> 
     <TextBlock Text="{Binding Text}"></TextBlock> 
    </ToolTip> 
    </TextBlock.ToolTip> 
</TextBlock> 

Control.xaml.cs में:

private void TextBlock_IsMouseDirectlyOverChanged(object sender, DependencyPropertyChangedEventArgs e) 
{ 
    bool isMouseOver = (bool)e.NewValue; 
    if (!isMouseOver) 
     return; 
    TextBlock textBlock = (TextBlock)sender; 
    bool needed = textBlock.ActualWidth > 
     (this.listView.View as GridView).Columns[2].ActualWidth; 
    ((ToolTip)textBlock.ToolTip).Visibility = 
     needed ? Visibility.Visible : Visibility.Collapsed; 
} 
+0

क्या यह टेक्स्ट टेक्स्टमिंग सक्षम के साथ काम करेगा? क्योंकि तब टेक्स्टब्लॉक शायद इसके लिए उपलब्ध होने से अधिक जगह नहीं लेगा। – ygoe

संबंधित मुद्दे