如何在工具提示中显示项目列表?

时间:2016-12-22 12:31:42

标签: c# wpf

我将以下样式应用于我的应用程序中的按钮

<Style x:Key="ButtonPartChooserValidation" TargetType="{x:Type Button}" BasedOn="{StaticResource ControlBaseStyle}">
    <Setter Property="Background" >
        <Setter.Value>
            <Binding Path="(Validation.Errors)" RelativeSource="{RelativeSource Self}">
                <Binding.Converter>
                    <converters:ValidationErrorsToBackgroundColorConverter/>
                </Binding.Converter>
            </Binding>
        </Setter.Value>
    </Setter>
    <Setter Property="Validation.ErrorTemplate">
        <Setter.Value>
            <ControlTemplate/>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="True">
            <Setter Property="ToolTip" Value="{Binding (Validation.Errors).[0].ErrorContent.Value[0], RelativeSource={x:Static RelativeSource.Self}}">                    
            </Setter>
        </Trigger>
        <Trigger Property="Validation.HasError" Value="False">
            <Setter Property="ToolTip" Value="Acceptable value"/>
            <Setter Property="Background" Value="White"/>
        </Trigger>
    </Style.Triggers>
</Style>

当出现验证错误时,按钮会显示黄色背景,工具提示会显示错误列表中的第一项。黄色背景是我想要实现的,但我想显示验证错误的完整列表,而不仅仅是第一个。我尝试了下面的内容,只显示了一个空列表(为简洁起见,只是上面的触发器,名称匹配)。

<Trigger Property="Validation.HasError" Value="True">
    <Setter Property="ToolTip">
        <Setter.Value>
            <ListBox ItemsSource="{Binding (Validation.Errors).[0].ErrorContent.Value, RelativeSource={x:Static RelativeSource.Self}}">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <Label Content="{Binding ErrMsg}" />
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
        </Setter.Value>
    </Setter>
</Trigger>

我几乎肯定需要两个ListBox元素来显示我的对象中的每个列表,但到目前为止,我甚至无法使用它。我设置错了什么?

1 个答案:

答案 0 :(得分:1)

您可以绑定到Tooltip的PlacementTarget的Validation.Errors附加属性:

<Setter Property="ToolTip">
    <Setter.Value>
        <ToolTip>
            <ItemsControl ItemsSource="{Binding Path=PlacementTarget.(Validation.Errors), RelativeSource={RelativeSource AncestorType=ToolTip}}">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding ErrorContent}" />
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
        </ToolTip>
    </Setter.Value>
</Setter>