2015-08-28 5 views
1

У меня возникла эта проблема, я использую telerik в WPF и источник на моей сетке и выполняю правильные привязки. Я хочу, чтобы отключить всплывающую подсказку, когда значение привязки является нулевым или пустым. Как это можно сделать? Это один пример:WPF - отключить подсказку, когда значение равно null или пустое

<telerik:GridViewDataColumn x:Name="GRIDVIEWCOLUMN_ENDDATE" Header="Data de Conclusão" DataMemberBinding="{Binding ClosedDate, StringFormat=dd-MM-yyyy}" IsVisible="False" Width="auto" IsFilterable="False"> 
    <telerik:GridViewDataColumn.ToolTipTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding ClosedDate, StringFormat=dd-MM-yyyy}" FontFamily="Segoe UI Light" FontSize="13.667" /> 
     </DataTemplate> 
    </telerik:GridViewDataColumn.ToolTipTemplate> 
</telerik:GridViewDataColumn> 

enter image description here

+1

является ToolTip имеет такое свойство IsVisible/IsEnable или вы можете скрыть его с любым параметром. Если это так, вы можете написать конвертер для этого свойства – Ugur

ответ

5

Просто связать видимость вашей подсказки (в данном случае, вы предоставили TextBlock) к тому же свойству - ClosedDate и использовать конвертер, чтобы получить значение, основанное на вашей логике.

public class TooltipVisibilityConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, 
     System.Globalization.CultureInfo culture) 
    { 
     if (value is string) 
     { 
      return String.IsNullOrEmpty(value as string) ? Visibility.Collapsed :Visibility.Visible; 
     } 

     return Visibility.Collapsed; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, 
     System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

В вашем XAML у вас будет что-то вроде этого. Вы объявляете свой конвертер как статический ресурс где-то в своем представлении, а позже ссылаетесь на него в своей привязке.

<converters:TooltipVisibilityConverter x:Key="TooltipVisibilityConverter"/> 

<telerik:GridViewDataColumn x:Name="GRIDVIEWCOLUMN_ENDDATE" Header="Data de Conclusão" DataMemberBinding="{Binding ClosedDate, StringFormat=dd-MM-yyyy}" IsVisible="False" Width="auto" IsFilterable="False"> 
<telerik:GridViewDataColumn.ToolTipTemplate> 
    <DataTemplate> 
     <TextBlock Text="{Binding ClosedDate, StringFormat=dd-MM-yyyy}" FontFamily="Segoe UI Light" FontSize="13.667" Visibility="{Binding ClosedDate, Converter={StaticResource x:Key="TooltipVisibilityConverter"}" /> 
    </DataTemplate> 
</telerik:GridViewDataColumn.ToolTipTemplate> 

+0

Спасибо! Это решило мою проблему. – EchO

+0

Добро пожаловать. Отметьте пост как ответ, если он это сделал. –

+1

ну, другой проблема только что произошло. кажется, что фактически блок блокируется, но всплывающая подсказка всплывает, но я могу заметить меньше, поэтому текстовый блок не виден. – EchO

2

Вы можете рассмотреть возможность использования IValueConverter, чтобы показать/скрыть подсказку границы

 <telerik:GridViewDataColumn x:Name="GRIDVIEWCOLUMN_ENDDATE" Header="Data de Conclusão" DataMemberBinding="{Binding ClosedDate, StringFormat=dd-MM-yyyy}" IsVisible="False" Width="auto" IsFilterable="False"> 
      <telerik:GridViewDataColumn.ToolTipTemplate> 
       <DataTemplate> 
       <Border Background="Black" Visibility="{Binding ClosedDate, Converter={StaticResource BorderVisible}}" > 
        <TextBlock Text="{Binding ClosedDate, StringFormat=dd-MM-yyyy}" FontFamily="Segoe UI Light" FontSize="13.667" /> 
       </Border> 
       </DataTemplate> 
      </telerik:GridViewDataColumn.ToolTipTemplate> 
     </telerik:GridViewDataColumn> 

    class BorderVisibilitySetter : IValueConverter 
    { 

     public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      //check if the control's content property is null or empty   
      if(value == null || value.ToString() == string.Empty) 
       return Visibility.Collapsed; 
      else 
       return Visibility.Visible; 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      throw new NotImplementedException(); 
     } 
    } 
+0

ну, другой проблема только что произошло. кажется, что фактически блок блокируется, но всплывающая подсказка всплывает, но я могу заметить меньше, поэтому текстовый блок не виден. – EchO

0

Установки подсказки родительского контроля IsEnabled лжи будет эффективно предотвратить всплывающую подсказку к попам если для параметра ToolTipService.ShowOnDisabled установлено значение true.

Проверьте ответ george.zakaryan, но вместо использования конвертера для привязки видимости текстового блока подсказки к его контенту используйте аналогичный конвертер, чтобы привязать свойство IsEnabled родительского элемента всплывающей подсказки к тексту Textblock.

public class StringToBoolConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (value is string) 
     { 
      return String.IsNullOrEmpty(value as string) ? false : true; 
     } 

     return false; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

в вашем XAML

<UserControl.Resources> 
    <utils:StringToBoolConverter x:Key="StringToBoolConverter"/> 
</UserControl.Resources> 

и

<TextBlock Text="{Binding SrcDrive, Mode=OneWay}" IsEnabled="{Binding SrcDrive, Converter={StaticResource StringToBoolConverter}, Mode=OneWay}" Width="400" > 
    <TextBlock.ToolTip> 
     <TextBlock Text="{Binding SrcDrive, Mode=OneWay}" /> 
    </TextBlock.ToolTip> 
</TextBlock> 
Смежные вопросы