列表框 SelectionChanged 无法在其 ItemTemplate 中使用 Button

2024-03-10

当我在列表框中选择项目时,下面的代码不起作用,您知道为什么吗?

<ListBox BorderBrush="Transparent" Background="Transparent" Name="listbox" HorizontalAlignment="Center" VerticalAlignment="Center" ScrollViewer.HorizontalScrollBarVisibility="Disabled" SelectionChanged="selection_changed">
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel/>
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
    <ListBox.ItemTemplate>
        <DataTemplate> 
            <Button Height="90" Width="150" Template="{StaticResource cbutton}"/>                
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox> 

模板 cbutton 看起来像这样

 <ControlTemplate x:Key="cbutton" TargetType="Button">
            <Border CornerRadius="3" BorderThickness="3.5" BorderBrush="White">
                <Border.Background>
                    <LinearGradientBrush EndPoint="1,1" StartPoint="0,0">
                        <GradientStop Color="DarkOrange" Offset="0.1"/>
                        <GradientStop Color="Orange" Offset="0.85"/>
                    </LinearGradientBrush>
                </Border.Background>
                <TextBlock FontWeight="ExtraBold" Foreground="White" TextAlignment="Center" TextWrapping="Wrap" FontSize="15" Text="{Binding name}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
            </Border>
        </ControlTemplate>

The SelectionChanged事件不会被触发,因为按钮是捕获鼠标单击的控件,而不是ListBox.

您可以将事件处理程序设置为按钮的单击事件。

   <Button Height="90" Width="150" Click="myClickEventHandler"/>  

无论如何,我建议您使用MVVM http://msdn.microsoft.com/en-us/magazine/dd419663.aspx,而不是代码隐藏事件处理程序。

例如,您可以设置一个在单击按钮时触发的命令并将命令发送到按钮的内容

  <Button Name="myButton" Height="90" Width="150" Template="{StaticResource cbutton}">     
      <i:Interaction.Triggers>
             <i:EventTrigger EventName="SelectionChanged">
                   <i:InvokeCommandAction Command="{Binding DoSomething}"  CommandParameter="{Binding ElementName=myButton, Path=Content}"/>
            </i:EventTrigger>
      </i:Interaction.Triggers>
  </Button>

视图模型

DoSomething = new DelegateCommand<object>(content=> 
{
    // Do whatever you want 

});

如果您不熟悉 MVVM,那么需要一些时间来学习,但这绝对是值得的:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

列表框 SelectionChanged 无法在其 ItemTemplate 中使用 Button 的相关文章

随机推荐

  • 将 MathML 复制到 Word 中以用作方程

    我可以成功地将使用 MS Word 2013 中的插入方程工具创建的方程以 MathML 格式复制到剪贴板 以便在其他地方使用 不过我主要需要导入到Word中 有没有办法将MathML格式的方程导入到word中作为方程使用 您是否刚刚尝试粘
  • 当我将 FusionTablesLayer 与 Google Maps JavaScript API v3 结合使用时出现空白页

    我使用融合表的数据准备了一个简单的页面 FusionTablesLayer 与 Google Maps JavaScript API v3 但不显示地图 您可以在此处查看该页面 http www siterary com 0test htm
  • Xamarin Forms 图像大小不匹配

    我正在使用 Xamarin Forms 实现一个跨平台应用程序 但我遇到了一个奇怪的错误 我正在尝试创建一个带有文本的按钮 为了实现它 我正在使用AbsoluteLayout 我已为每种 iOS 分辨率类型 png 2x png 3x pn
  • System.InvalidCastException:对象无法从 DBNull 转换为其他类型

    我的代码中有一个例外 我已经尝试将 int64 更改为 int32 但这并没有改变它 在数据库中 表示 column ID 的单元格的数据类型为 NUMBER 问题出在这段代码的第 7 行 private void dataGridView
  • 如何将 numpy.array 作为新列添加到 pyspark.SQL DataFrame 中?

    这是创建 pyspark sql DataFrame 的代码 import numpy as np import pandas as pd from pyspark import SparkContext from pyspark sql
  • 如何使 geom_line 和 geom_point 抖动相同的幅度?

    我有一个ggplot2具有显着重叠的两条线的折线图 我正在尝试使用position jitterdodge 这样它们就更明显了 但我无法以相同的方式让线条和点都抖动 我试图仅水平抖动点和线 因为我不想建议 y 轴上的任何更改 这是一个 MW
  • JQuery 选择框和循环帮助

    谢谢阅读 我对 jQuery 有点陌生 我正在尝试制作一个可以包含在我所有网站中的脚本来解决一个总是让我发疯的问题 问题 带有长选项的选择框在 Internet Explorer 中会被截断 例如 这些选择框 http discoverfi
  • glReadPixels 总是在 glClearColor 中返回相同的值

    我一直在努力理解 glReadPixels 的输出 它在理论上似乎很简单 但实际上产生了令人费解的结果 至少对我来说 假设我有一个简单的片段着色器 它绘制一个颜色值为 vec4 0 2 0 0 0 的三角形 而背景颜色设置为 0 3 1 0
  • 如何在 Vim 中根据光标下的字符在函数中执行某些操作?

    我正在编写一个在 LaTeX 中编辑特定环境的函数 环境基本上是这样的 begin quicktikz some stuff end quicktikz 或者像这样 begin quicktikz some stuff end quickt
  • Py3k 和 IPython

    我正在升级到 Python 3 但似乎找不到它的 IPython 版本 主要的IPython发布页面 http ipython scipy org moin Download没有列出任何合适的内容 任何让 IPython 为 Py3k 工作
  • 如何编写单元测试?

    我有一个Java课程 我怎么能够单元测试 http en wikipedia org wiki Unit testing it 就我而言 我让类进行二进制求和 需要两个byte 数组 对它们求和 然后返回一个新的二进制数组 我为两者提供这篇
  • 在实体框架迁移期间读取数据库(选择查询)

    我知道我可以使用Sql方法在迁移期间更新数据 对于可以用纯 SQL 表达的简单事物非常有用 我也知道我可以使用Seed方法 但这感觉就像一个黑客 我想编写的代码必须在执行迁移时执行一次 在我当前的情况下 我需要从列中删除 HTML 标签 并
  • 学习 Java:如何为 System.out.println() 创建短别名

    我想为其创建别名或扩展版本System out println 用于打印我的各种类型的变量 如何将未知类型 类的参数传递给方法 public static void p VariableType args System out printl
  • React Router - 在新选项卡上打开链接并重定向到主页

    使用 React Router 4 2 我的尝试是open单击导航链接后会出现一个新选项卡 同时重定向到网站主页 即 导航栏 单击 策略 即使下面的代码的行为符合上述要求 这是明智的方法吗 旨在学习 Routes js 上的最佳实践 Rou
  • 插入百分比 Charts.js 甜甜圈

    我正在使用 Charts js 库 想知道如何在圆环图的孔中添加一些标记 比如百分比 My js jQuery document ready function var data value 5 color A1638C highlight
  • 从 [NSDate date] 获取当前日期,但将时间设置为上午 10:00

    如何重置从 NSDate date 检索到的当前日期 然后将时间更改为早上 10 00 与所有日期操作一样 您必须使用NSDate组件 https developer apple com documentation foundation n
  • 用宏定义数组的长度是“优秀实践”吗?

    我正在读一本叫做C 编程 现代方法 https rads stackoverflow com amzn click com 0393979504在讨论数组的第一部分中 作者指出 使用宏定义数组的长度是很好的做法 然后使用简短的例子 defi
  • 艰苦学习Python练习18帮助

    我了解除第一个之外的所有功能 args 是什么意思 thanks def print twice args arg1 arg2 args print arg1 r arg2 r arg1 arg2 def print twice again
  • 反转 LinearLayout 的方向

    如何反转线性布局的方向 例如 如果我的布局是 view1 view2 view3 我想创建 view3 view2 view1 我的目标是从一个 XML 布局中扩充左手实例和右手实例 一般来说 我会说你不能使用标准 SDK 来做到这一点 但
  • 列表框 SelectionChanged 无法在其 ItemTemplate 中使用 Button

    当我在列表框中选择项目时 下面的代码不起作用 您知道为什么吗