none
如何将style内的控件事件通知外部 RRS feed

  • 问题

  •  <Style x:Key="CoverListBoxItemStyle" TargetType="{x:Type ListBoxItem}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ListBoxItem}">
                        <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}"
                                Background="{TemplateBinding Background}" SnapsToDevicePixels="true"
                                Margin="0 14 14 0">
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="Auto"></ColumnDefinition>
                                    <ColumnDefinition></ColumnDefinition>
                                </Grid.ColumnDefinitions>
                                
                                <ContentPresenter Grid.Column="0" Grid.ColumnSpan="2" HorizontalAlignment="Stretch" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Stretch"/>
                                <CheckBox Grid.Column="0" Margin="5 0" Focusable="False" Style="{DynamicResource CheckBoxStyle}"
                                        IsChecked="{Binding Path= IsSelected, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"
                                        SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Center" Padding="5"
                                        Visibility="{Binding Path = SelectionMode, Converter={StaticResource SelectionModeToVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type ListBox}}}"/>
                                <Button Grid.Column="1" Style="{DynamicResource BlackButtonStyle}" Foreground="#60000000"
                                        Tag="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DataContext}"
                                        SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Stretch"
                                        Visibility="{Binding Path = SelectionMode, Converter={StaticResource SelectionModeToVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type ListBox}}}"/>
                            </Grid>
                        </Border>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsSelected" Value="true">
                                <Setter Property="Background" TargetName="Bd" Value="{DynamicResource ListItemSelectedColor}"/>
                            </Trigger>
                            <Trigger Property="IsSelected" Value="False">
                                <Setter Property="Background" TargetName="Bd" Value="{DynamicResource ListItemNotSelectedColor}"/>
                            </Trigger>
                            <Trigger Property="IsEnabled" Value="false">
                                <Setter Property="Foreground" Value="#F1F1F1"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

    如上,我有个style在模板定义内,我能否将里面的button的click事件报出来。我有多个不同的xaml文件使用到该style,而不想将该style放到相应xaml内,有什么办法解决?

    还是说我将button放到ListBox的ItemTemplate才能实现?


    • 已编辑 skczjun 2014年12月10日 3:19
    2014年12月10日 3:17

答案

全部回复

  • 這要用 Command Binding.
    命令概述
    WPF命令(Command)介绍、命令和数据绑定集成应用

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2014年12月10日 8:00
  • @skczjun,

    除了Command你还可以用EventSetter :

    <Style TargetType="{x:Type ListBoxItem}">
          <EventSetter Event="MouseWheel" Handler="GroupListBox_MouseWheel" />
          <Setter Property="Template" ... />
    </Style>
    当然Command要更灵活一些。



    Barry
    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2014年12月17日 9:45
    版主