开发者

WPF- trigger target not found

开发者 https://www.devze.com 2023-01-23 04:14 出处:网络
I have own style on listbox, I use in style datatemplate and also control template. In data template I create listbox item with some textb开发者_Go百科oxes. In control template I want create a trigger

I have own style on listbox, I use in style data template and also control template. In data template I create listbox item with some textb开发者_Go百科oxes. In control template I want create a trigger which change foreground color of some textbox if listbox item is selected.

Here is some from style:

    <Style x:Key="lbStyle" TargetType="{x:Type ListBox}">
        <Setter Property="ItemTemplate">
            <Setter.Value>
                <DataTemplate>
                    <Grid Name="MainGrid">
                        <TextBlock Name="tbName" Text="{Binding Value.nick}"
                                       Grid.Column="0" Grid.Row="0" Margin="2,2,2,2" 
                                       FontSize="13" FontWeight="Medium"></TextBlock>
                    </Grid>
                </DataTemplate>
            </Setter.Value>
        </Setter>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ListBoxItem">
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsSelected" Value="true">
                            <Setter TargetName="tbName" Property="Foreground" Value="Black"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>

    </Style>

Problem is, I get compile error : Cannot find the Trigger target tbName.


<Style TargetType="ListBox">
    <Setter Property="ItemTemplate">
        <Setter.Value>
            <DataTemplate>
                <TextBlock Text="{Binding}" Margin="2" FontSize="13" FontWeight="Medium">
                    <TextBlock.Style>
                        <Style BasedOn="{StaticResource {x:Type TextBlock}}" TargetType="TextBlock">
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ListBoxItem}, Path=IsSelected}" Value="True">
                                    <Setter Property="Foreground" Value="Black"/>
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </TextBlock.Style>
                </TextBlock>
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>


Your code of template is incorrect. You apply ListBoxItem template to ListBox template. Also, you didn't add anything inside ControlTemplate.

I have rewrited it:

<Style x:Key="itemStyle" TargetType="{x:Type ListBoxItem}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ListBoxItem">
                    <ContentPresenter x:Name="itemContent"/>

                    <ControlTemplate.Triggers>
                        <Trigger Property="IsSelected" Value="true">
                            <Setter TargetName="itemContent" Property="TextBlock.Foreground" Value="Red"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

ListBox with applied style:

<ListBox ItemContainerStyle="{StaticResource itemStyle}" />
0

精彩评论

暂无评论...
验证码 换一张
取 消