Видимость подсказки - PullRequest
       9

Видимость подсказки

2 голосов
/ 01 августа 2010

У меня есть следующий код:

<DataTemplate>
    <!--<sdk:DataGridTextColumn Binding="{Binding Description}" Header="Description" Width="205" />-->
    <TextBlock  Text="{Binding Description}"    Width="232">
        <ToolTipService.ToolTip  >   
            <ToolTip Visibility="{Binding    }">
                <sdk:DataGrid AutoGenerateColumns="False" GridLinesVisibility="None" HeadersVisibility="None" Height="Auto" ItemsSource="{Binding Contains}" >
                    <sdk:DataGrid.Columns>
                        <sdk:DataGridTextColumn Binding="{Binding Code}" Header="Code" CanUserSort="False" />
                        <sdk:DataGridTextColumn Binding="{Binding Description}" Header="Description" CanUserSort="False"/> 
                    </sdk:DataGrid.Columns>
                </sdk:DataGrid>            
            </ToolTip>
        </ToolTipService.ToolTip>
    </TextBlock>
</DataTemplate>

Я бы хотел, чтобы моя подсказка показывалась, только если в ItemsSource="{Binding Contains}"

есть хотя бы одна строка

Что я должен написать в свойстве Visibility? Что-то вроде

<ToolTip Visibility="{Binding Contains.Length > 0}">

Но я не могу понять, каким должен быть синтаксис! Есть идеи?

Ответы [ 3 ]

3 голосов
/ 01 августа 2010

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

2 голосов
/ 01 августа 2010

Это работа для реализации IValueConverter. Выложив много таких примеров в прошлом, я понял, что большую часть времени будет работать пара более общих реализаций, поэтому я написал в блоге.

IValueConverter вам нужно, мой StringToObjectConverter в блоге здесь . С помощью кода для этого конвертера в вашем проекте вы можете создать его экземпляр на таком ресурсе: -

<Grid x:Name="LayoutRoot">
    <Grid.Resources>
        <local:StringToObjectConverter x:Key="CountToVisibility">
            <ResourceDictionary>
                <Visibility x:Key="__Default__">Visible</Visibility>
                <Visibility x:Key="0">Collapsed</Visibility>
            </ResourceDictionary>
        </local:StringToObjectConverter>
    </Grid.Resources>

и затем используется при привязке к видимости, в вашем случае: -

 <ToolTip Visibility="{Binding Contains.Length, Converter={StaticResource CountToVisibility}}">

Кстати, вы уверены, что хотите Length не Count?

2 голосов
/ 01 августа 2010

В качестве альтернативы вы можете использовать триггеры: Установите видимость вашей подсказки по умолчанию на Видимый и добавьте эту разметку:

<DataTemplate.Triggers>
    <DataTrigger Binding="{Binding Contains.Length}" Value="0">
        <Setter TargetName="myTooltip" Property="Visibility" Value="Hidden" />
    </DataTrigger>
</DataTemplate.Triggers>
...