0

好的,我希望这没有一个令人尴尬的明显答案,但是我无法通过搜索找到解决方案。

我希望我的 longlistmulti 基本上像邮件应用程序一样运行,即让“选择”应用程序栏按钮将列表置于编辑模式,因此您可以对其执行操作。

但是,我想抑制列表响应任何项目左侧的点击的行为,即项目宽度的前 10% 部分,这会将列表置于编辑模式。

我有一个按钮作为项目模板的一部分,它与左侧非常齐平,我需要它作为每个项目自己的事件处理程序的触发器。

所以我只想阻止通过点击项目将其置于编辑模式的事件。希望这可以做到。史蒂夫

快速补充说明:无论如何,我都想抑制这种默认行为,即使我决定不将该按钮作为我的最终实现。我不想将该按钮作为永久考虑因素。

4

1 回答 1

1

您在这里有几个选择。一是处理IsSelectionEnabledChanged事件,二是修改控件模板。如果您想自己将列表置于编辑模式,我建议使用模板修改方法,因为事件处理程序在确定更改事件的来源时可能有点复杂。

从 Document Outline 窗格(CTRL+ WU使其可见),右键单击您的列表控件,然后导航到 Edit Additional Templates => Edit ItemContainerStyle => Edit a Copy... 使用对话框命名模板并将其放置在您的首选资源中字典。查找命名的矩形并将InnerHintPanelOuterHintPanel删除。这将删除激活编辑模式的点击区域。下面复制了这些矩形的 XAML。

<Grid HorizontalAlignment="Stretch">
    ...
    <Rectangle x:Name="InnerHintPanel" Grid.Column="0" Width="24"
        Height="{TemplateBinding HintPanelHeight}"
        HorizontalAlignment="Left"
        Fill="Transparent"
        StrokeThickness="0">
        <Rectangle.RenderTransform>
            <CompositeTransform TranslateX="24"/>
        </Rectangle.RenderTransform>
    </Rectangle>
    ...
</Grid>
<Rectangle x:Name="OuterHintPanel" Width="24"
    HorizontalAlignment="Left"
    Height="{TemplateBinding HintPanelHeight}"
    Fill="{TemplateBinding Background}"
    StrokeThickness="0" Opacity="0.0"/>

您可能还应该删除所有已Storyboard.TargetName设置为这些元素名称之一的情节提要动画,否则如果您进入编辑模式并且无法找到这些元素,则控制状态的转换将导致异常。

于 2013-10-11T17:47:47.500 回答