3

背景: 各リストボックス項目にラジオ ボタンがあるカスタム リストボックスを作成しているので、基本的には RadioButtonList になります。コントロールは完全にコードで作成されます。現時点では、コントロールは正しくレンダリングおよび動作し、2 つの方向 (水平/垂直) をサポートしています。リストボックスは、RadioButton と TextBlock を持つ StackPanel である ItemTemplate を使用します。

これまでのところ、背景を透明に設定するスタイルを使用して、アイテムが選択されたときにアイテムの背景色が変化するのを防ぐことができました。

前景色についても同じことをしたいと思います。

基本的にListBoxのSelectionモードはシングルで、項目が選択されたらRadioButtonに反映させたいだけです。

次のコードを使用して ItemContainerStyle を設定しています。

System.Windows.Style style =  
    new System.Windows.Style(typeof(System.Windows.Controls.ListBoxItem));  

System.Windows.Media.SolidColorBrush brush =  
    new System.Windows.Media.SolidColorBrush(System.Windows.Media.Colors.Transparent);  

style.Resources.Add(System.Windows.SystemColors.HighlightBrushKey, brush);

私のテンプレートの TextBlock は、次のように System.Windows.FactoryFrameworkElement を使用して作成されます。

System.Windows.FrameworkElementFactory factoryTextBlock =   
    new System.Windows.FrameworkElementFactory(typeof(System.Windows.Controls.TextBlock));
factoryTextBlock.SetBinding(System.Windows.Controls.TextBlock.TextProperty, new System.Windows.Data.Binding("Description"));  
factoryStackPanel.AppendChild(factoryTextBlock);

次に、FactoryTextBox が FactoryStackPanel に追加され、ListBox の ItemTemplate として設定されます。

現時点では、アイテムを選択したときに背景色を透明に設定しています。テキストはデフォルトで白に設定されるため、項目を選択すると視覚的に消えます。テキストブロックが選択されたときに、テキストブロックの前景に色を設定する方法を探しています。今のところ黒でもかまいませんが、最終的にはより高いレベルでフォントの色を参照するようになります。

4

1 に答える 1

6

XAML を使用した例を次に示します。C# への変換はお任せします。

<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:sys="clr-namespace:System;assembly=mscorlib"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid.Resources>
        <x:Array x:Key="data" Type="{x:Type sys:String}">
            <sys:String>sphinx</sys:String>
            <sys:String>of</sys:String>
            <sys:String>black</sys:String>
            <sys:String>quartz</sys:String>
        </x:Array>
    </Grid.Resources>
    <ListBox ItemsSource="{StaticResource data}">
        <ListBox.Resources>
            <Style TargetType="{x:Type ListBoxItem}">
                <Style.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="Foreground" Value="Pink"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </ListBox.Resources>
    </ListBox>
</Grid>
于 2009-02-13T17:25:15.633 に答える