wangwulicsdn 2024-08-26 12:56 采纳率: 46.4%
浏览 21
已结题

WPF HandyControl Trigger IsSelected 触发器修改 ListBox 中 DataTemplate 模板 StackPanel 背景图片(相关搜索:触发器)

WPF HandyControl Trigger IsSelected 触发器修改 ListBox 中 DataTemplate 模板 StackPanel 背景图片

img


  <ListBox ItemsSource="{Binding NavMenus}" BorderThickness="0" ItemTemplate="{DynamicResource leftItemTemplate}"  ItemContainerStyle="{DynamicResource mainMenuItemStyle}" Background="Transparent" SelectionMode="Single" SelectedItem="{Binding SelectMenu}"  Grid.Column="0" Grid.Row="2" >
      <i:Interaction.Triggers>
          <i:EventTrigger EventName="SelectionChanged">
              <i:InvokeCommandAction Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window},Path=DataContext.SelectItemCmd}"/>
          </i:EventTrigger>
      </i:Interaction.Triggers>
      <ListBox.ItemsPanel>
          <ItemsPanelTemplate>
              <StackPanel Orientation="Vertical"/>
          </ItemsPanelTemplate>
      </ListBox.ItemsPanel>
  </ListBox>
    

  <!--主页左边导航项模板-->
  <DataTemplate x:Key="leftItemTemplate" DataType="{x:Type vm:MainItemInfo}">
      <Grid >
          <StackPanel x:Name="StackPanel" Width="200px" Height="55px" HorizontalAlignment="Center" VerticalAlignment="Center">
              <StackPanel.Background>
                  <ImageBrush ImageSource="/imgs/Button1.png" />                      
              </StackPanel.Background>
              <TextBlock Text="{Binding ItemText}"  Style="{StaticResource TextBlockDefaultBold}"  Margin="20"  Foreground="White" />
          </StackPanel>
      </Grid>
  </DataTemplate>
  <!--主页左边导航项样式-->
  <Style TargetType="ListBoxItem" x:Key="mainMenuItemStyle">
      <Setter Property="Height" Value="60px"/>
      <Setter Property="Template">
          <Setter.Value>
              <ControlTemplate TargetType="ListBoxItem">
                  <Border x:Name="br">
                      <ContentPresenter VerticalAlignment="Center"/>
                  </Border>
                  <ControlTemplate.Triggers>

                      <!--<Trigger Property="IsSelected" Value="True">
                          <Setter TargetName="StackPanel" Property="Background">
                              <Setter.Value>
                                  <ImageBrush ImageSource="/imgs/Button2.png" />
                              </Setter.Value>
                          </Setter>
                      </Trigger>-->
                                            
                      <!--<Trigger Property="IsMouseOver" Value="True">                             
                          <Setter Property="Background">
                              <Setter.Value>
                                  <ImageBrush ImageSource="/imgs/Button2.png" />
                              </Setter.Value>
                          </Setter>
                      </Trigger>
                      <Trigger Property="IsSelected" Value="True">
                          <Setter Property="Background">
                              <Setter.Value>
                                  <ImageBrush ImageSource="/imgs/Button2.png" />
                              </Setter.Value>
                          </Setter>
                      </Trigger>-->
                  </ControlTemplate.Triggers>
              </ControlTemplate>
          </Setter.Value>
      </Setter>

  </Style>


  • 写回答

23条回答

  • 阿里嘎多学长 2024-08-26 13:06
    关注
    获得0.36元问题酬金

    AIGC生成:


    🤔

    你好!我是阿里嘎多学长,欢迎来到我的技术问答区! 😊

    根据你的问题,想要使用 WPF HandyControl Trigger IsSelected 触发器修改 ListBox 中 DataTemplate 模板 StackPanel 背景图片。

    首先,我们需要在 ListBox 的 ItemTemplate 中添加一个 Trigger,以便在 IsSelected 状态下修改 StackPanel 的 Background。

    下面是一个示例代码:

    <ListBox>
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel>
                    <!-- 其他内容 -->
                    <Trigger Property="IsSelected" Value="True">
                        <Setter TargetName="StackPanel" Property="Background" Value="Red" />
                    </Trigger>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
    

    在上面的代码中,我们使用了 Trigger 来监听 ListBoxItem 的 IsSelected 属性,如果 IsSelected 属性为 True,则将 StackPanel 的 Background 设置为红色。

    如果你想要在 IsSelected 状态下修改 StackPanel 的 Background 的颜色,可以使用 Setter 来设置 Background 的值。

    例如:

    <Trigger Property="IsSelected" Value="True">
        <Setter TargetName="StackPanel" Property="Background" Value="Red" />
    </Trigger>
    

    在上面的代码中,我们使用 Setter 来设置 StackPanel 的 Background 属性为红色。

    如果你想要在 IsSelected 状态下修改 StackPanel 的 Background 的颜色,并且在非 IsSelected 状态下恢复到原始颜色,可以使用 MultiTrigger。

    例如:

    <MultiTrigger>
        <MultiTrigger.Conditions>
            <Condition Property="IsSelected" Value="True" />
        </MultiTrigger.Conditions>
        <Setter TargetName="StackPanel" Property="Background" Value="Red" />
    </MultiTrigger>
    

    在上面的代码中,我们使用 MultiTrigger 来监听 ListBoxItem 的 IsSelected 属性,如果 IsSelected 属性为 True,则将 StackPanel 的 Background 设置为红色。

    如果你想要在 IsSelected 状态下修改 StackPanel 的 Background 的颜色,并且在非 IsSelected 状态下恢复到原始颜色,并且在鼠标悬浮状态下改变 Background 的颜色,可以使用 EventTrigger。

    例如:

    <EventTrigger RoutedEvent="MouseEnter">
        <EventTrigger.Actions>
            <Setter TargetName="StackPanel" Property="Background" Value="Yellow" />
        </EventTrigger.Actions>
    </EventTrigger>
    

    在上面的代码中,我们使用 EventTrigger 来监听 MouseEnter 事件,如果鼠标悬浮在 ListBoxItem 上,则将 StackPanel 的 Background 设置为黄色。

    这些都是使用 WPF HandyControl Trigger IsSelected 触发器修改 ListBox 中 DataTemplate 模板 StackPanel 背景图片的示例代码。

    希望这些示例代码能够帮助你解决问题! 😊

    评论

报告相同问题?

问题事件

  • 系统已结题 9月3日
  • 创建了问题 8月26日

悬赏问题

  • ¥15 CCF-CSP 2023 第三题 解压缩(50%)
  • ¥30 comfyui openpose报错
  • ¥20 Wpf Datarid单元格闪烁效果的实现
  • ¥15 图像分割、图像边缘提取
  • ¥15 sqlserver执行存储过程报错
  • ¥100 nuxt、uniapp、ruoyi-vue 相关发布问题
  • ¥15 浮窗和全屏应用同时存在,全屏应用输入法无法弹出
  • ¥100 matlab2009 32位一直初始化
  • ¥15 Expected type 'str | PathLike[str]…… bytes' instead
  • ¥15 三极管电路求解,已知电阻电压和三级关放大倍数