0

カスタムリストボックスを作成し、bool に基づいて、いくつかのアイテムのマウスホバリングとマウス選択を無効にしたいと考えています。Style クラスを使用して、カスタム リストボックスのコードにスタイルを設定しました。私のコードは次のとおりです。

public class DragDropListBox : ListBox
{
    public DragDropListBox()
    {
         Style itemContainerStyle        = new Style(typeof(ListBoxItem));
        itemContainerStyle.Setters.Add(new EventSetter(ListBoxItem.DropEvent, new DragEventHandler(ListBoxItemDropHandler)));
        this.ItemContainerStyle         = itemContainerStyle;
    }        
}

現在、ドロップ イベントのイベント セッターを設定しており、正常に動作しています。フラグに基づいてアイテムのマウス ホバーとマウス選択効果を無効にするスタイルを設定するにはどうすればよいですか? 私が見つけたコードのほとんどは XAML でした。しかし、カスタム リストボックスのコードが必要です。どんな助けでも大歓迎です。

これまでのところ、このスタイルは私にとってはうまくいきますが、XAML ではどのように C# コード、特にビジュアル状態とストーリーボードを変換すればよいでしょうか..

<Style x:Key="ListBoxItemStyleTransparentSelect" TargetType="ListBoxItem">
        <Setter Property="Background" Value="Transparent"/>
        <EventSetter Event="Drop" Handler="listbox1_Drop"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ListBoxItem">
                    <Grid Background="{TemplateBinding Background}">
                        <VisualStateManager.VisualStateGroups>
                            <VisualStateGroup x:Name="CommonStates">
                                <VisualState x:Name="Normal"/>
                                <VisualState x:Name="MouseOver">
                                    <Storyboard>
                                        <DoubleAnimation Duration="0" To=".35" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="fillColor"/>
                                    </Storyboard>
                                </VisualState>
                                <VisualState x:Name="Disabled">
                                    <Storyboard>
                                        <DoubleAnimation Duration="0" To=".55" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="contentPresenter"/>
                                    </Storyboard>
                                </VisualState>
                            </VisualStateGroup>
                            <VisualStateGroup x:Name="SelectionStates">
                                <VisualState x:Name="Unselected"/>
                                <VisualState x:Name="Selected"/>
                            </VisualStateGroup>
                            <VisualStateGroup x:Name="FocusStates">
                                <VisualState x:Name="Focused"/>
                                <VisualState x:Name="Unfocused"/>
                            </VisualStateGroup>
                        </VisualStateManager.VisualStateGroups>
                        <Rectangle x:Name="fillColor" IsHitTestVisible="True" Opacity="0" RadiusY="1" RadiusX="1"/>
                        <Rectangle x:Name="fillColor2" IsHitTestVisible="True" Opacity="0" RadiusY="1" RadiusX="1"/>
                        <ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}"/>
                        <Rectangle x:Name="FocusVisualElement" RadiusY="1" RadiusX="1" StrokeThickness="1" Visibility="Collapsed"/>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
4

1 に答える 1