Условная подсказка для DataGridTextColumn - PullRequest
1 голос
/ 06 апреля 2020

В настоящее время у меня возникла небольшая проблема с моим DataGridTextColumn.

Я хочу отобразить всплывающую подсказку в DataGridTextColumn, но только если текст не пустой.

Как этого добиться? Код, который я сейчас использую:

                <DataGridTextColumn IsReadOnly="True" Header="Person" Binding="{Binding SomeBinding, TargetNullValue='-'}" Width="Auto"
                CellStyle="{StaticResource SomeStyle}"/>

Со стилем

            <Style x:Key="SomeStyle" 
           TargetType="DataGridCell" BasedOn="{StaticResource InactiveStyle}">
        <Style.Setters>
            <Setter Property="ToolTip" Value="{Binding Path=SomeBinding}"/>
        </Style.Setters>
            </Style>

Этот код предоставляет мне всплывающую подсказку, однако он также показывает подсказку, когда текст отсутствует , Если есть какие-либо вопросы, пожалуйста, дайте мне знать, и я могу помочь вам.

Ответы [ 2 ]

2 голосов
/ 06 апреля 2020

Попробуйте добавить триггеры данных для string.Empty и null:

<Style x:Key="SomeStyle" TargetType="DataGridCell" 
       BasedOn="{StaticResource InactiveStyle}">
    <Style.Triggers>
        <DataTrigger Binding="{Binding Path=SomeBinding}" Value="">
            <Setter Property="ToolTip" Value="{x:Null}"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding Path=SomeBinding}" Value="{x:Null}">
            <Setter Property="ToolTip" Value="{x:Null}"/>
        </DataTrigger>
    </Style.Triggers>
    <Style.Setters>
        <Setter Property="ToolTip" Value="{Binding Path=SomeBinding}"/>
    </Style.Setters>
</Style>
1 голос
/ 06 апреля 2020

Вот подход:

    //Create a class which inherits from IValueConverter
    public class CellToolTipConverter : IValueConverter
    {
     #region IValueConverter Membres

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        string stringValue = (string)value;
        if (!string.IsNullOrEmpty(stringValue))
            return  "Your tooltip";//As you are in a c# class, you have many possibilities.
       else
        return string.Empty;
    }

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

    #endregion
   }



     //In your xaml :

     //Declare your namespace
     xmlns:CustomClasses="clr-namespace:YourAssamblyName.YourNameSpaceOfConverterClass"


     <UserControl.Resources>
         <CustomClasses:CellToolTipConverter x:Key="CustomToolTipConverter"/>              
     </UserControl.Resources>



        //In your grid view
        <GridView.RowStyle>
            <Style TargetType="{x:Type telerik:GridViewRow}">
                <Setter Property="MyCustomToolTipProperty" Value="{Binding YourProperty, Converter= 
     {StaticResource CustomToolTipConverter}}"/>
            </Style>
        </GridView.RowStyle>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...