1

カスタム テンプレートを使用した ListBox の ListBoxItem の例を次に示します。

<ListBox Margin="0,140,0,0" x:Name="ListBox_Main" VerticalAlignment="Top" Foreground="Black" SelectionChanged="ListBox_Main_SelectionChanged" FontFamily="Segoe UI" Grid.RowSpan="2" FontSize="26.667">
            <ListBox.Resources>
                <Style x:Key="CustomStyle_ListBox" TargetType="ListBox">
                    <Setter Property="Foreground" Value="{StaticResource ListBoxForegroundThemeBrush}"/>
                    <Setter Property="Background" Value="{StaticResource ListBoxBackgroundThemeBrush}"/>
                    <Setter Property="BorderBrush" Value="{StaticResource ListBoxBorderThemeBrush}"/>
                    <Setter Property="BorderThickness" Value="{StaticResource ListBoxBorderThemeThickness}"/>
                    <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled"/>
                    <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
                    <Setter Property="ScrollViewer.HorizontalScrollMode" Value="Disabled"/>
                    <Setter Property="ScrollViewer.IsHorizontalRailEnabled" Value="True"/>
                    <Setter Property="ScrollViewer.VerticalScrollMode" Value="Enabled"/>
                    <Setter Property="ScrollViewer.IsVerticalRailEnabled" Value="True"/>
                    <Setter Property="ScrollViewer.ZoomMode" Value="Disabled"/>
                    <Setter Property="ScrollViewer.IsDeferredScrollingEnabled" Value="False"/>
                    <Setter Property="ScrollViewer.BringIntoViewOnFocusChange" Value="True"/>
                    <Setter Property="IsTabStop" Value="False"/>
                    <Setter Property="TabNavigation" Value="Once"/>
                    <Setter Property="FontFamily" Value="{StaticResource ContentControlThemeFontFamily}"/>
                    <Setter Property="FontSize" Value="{StaticResource ControlContentThemeFontSize}"/>
                    <Setter Property="ItemsPanel">
                        <Setter.Value>
                            <ItemsPanelTemplate>
                                <VirtualizingStackPanel/>
                            </ItemsPanelTemplate>
                        </Setter.Value>
                    </Setter>
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="ListBox">
                                <Border x:Name="LayoutRoot" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}">
                                    <VisualStateManager.VisualStateGroups>
                                        <VisualStateGroup x:Name="CommonStates">
                                            <VisualState x:Name="Normal"/>
                                            <VisualState x:Name="Disabled">
                                                <Storyboard>
                                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="LayoutRoot">
                                                        <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent"/>
                                                    </ObjectAnimationUsingKeyFrames>
                                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="LayoutRoot">
                                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ListBoxDisabledForegroundThemeBrush}"/>
                                                    </ObjectAnimationUsingKeyFrames>
                                                </Storyboard>
                                            </VisualState>
                                        </VisualStateGroup>
                                        <VisualStateGroup x:Name="FocusStates">
                                            <VisualState x:Name="Focused">
                                                <Storyboard>
                                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="LayoutRoot">
                                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ListBoxFocusBackgroundThemeBrush}"/>
                                                    </ObjectAnimationUsingKeyFrames>
                                                </Storyboard>
                                            </VisualState>
                                            <VisualState x:Name="Unfocused">
                                                <Storyboard>
                                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="LayoutRoot">
                                                        <DiscreteObjectKeyFrame KeyTime="0" Value="#FFFFFFFF"/>
                                                    </ObjectAnimationUsingKeyFrames>
                                                </Storyboard>
                                            </VisualState>
                                        </VisualStateGroup>
                                    </VisualStateManager.VisualStateGroups>
                                    <ScrollViewer x:Name="ScrollViewer" BringIntoViewOnFocusChange="{TemplateBinding ScrollViewer.BringIntoViewOnFocusChange}" HorizontalScrollMode="{TemplateBinding ScrollViewer.HorizontalScrollMode}" HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}" IsHorizontalRailEnabled="{TemplateBinding ScrollViewer.IsHorizontalRailEnabled}" IsVerticalRailEnabled="{TemplateBinding ScrollViewer.IsVerticalRailEnabled}" IsDeferredScrollingEnabled="{TemplateBinding ScrollViewer.IsDeferredScrollingEnabled}" Padding="{TemplateBinding Padding}" TabNavigation="{TemplateBinding TabNavigation}" VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}" VerticalScrollMode="{TemplateBinding ScrollViewer.VerticalScrollMode}" ZoomMode="{TemplateBinding ScrollViewer.ZoomMode}">
                                        <ItemsPresenter/>
                                    </ScrollViewer>
                                </Border>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </ListBox.Resources>
            <ListBox.Style>
                <StaticResource ResourceKey="CustomStyle_ListBox"/>
            </ListBox.Style>
                <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel Orientation="Vertical" />                                     
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>
        <ListBox.ItemContainerStyle>
            <Style TargetType="ListBoxItem">
                <Setter Property="Padding" Value="120 10 120 10 " />
            </Style>
        </ListBox.ItemContainerStyle>
            <ListBoxItem Background="#19000000" Template="{StaticResource CustomStyle_ListBoxItem}" Content="Item 1"/>
            <ListBoxItem Background="#19000000" Template="{StaticResource CustomStyle_ListBoxItem}" Content="Item 2"/>
            <ListBoxItem Background="#19000000" Template="{StaticResource CustomStyle_ListBoxItem}" Content="Item 3"/>
            <ListBoxItem Background="#19000000" Template="{StaticResource CustomStyle_ListBoxItem}" Content="Item 4"/>
        </ListBox>

そして今、C# で別の ListBoxItem を追加したい:

ListBoxItem item = new ListBoxItem();
item.Content = "item 5";
ListBox_Main.add(item); //credit goes to Danilo Vulović

XAML の ListBoxItems で使用されるテンプレートである {StaticResource CustomStyle_ListBoxItem} を使用したいのですが、C# でこれを行うにはどうすればよいですか?

4

1 に答える 1

0

常に同じテンプレートを使用している場合は、アイテムごとにテンプレートを設定する必要はありません。これには、ItemTemplateプロパティを使用するだけです。

 <ListBox ItemTemplate="{StaticResource }" x:Name="ListBox_Main" ... >

何らかの理由で、コードビハインドの各アイテムに対して具体的に実行したい場合は、次のようにします。

ListBoxItem item = new ListBoxItem();
item.Content = "item 5";
item.Template = Resources["CustomStyle_ListBoxItem"] as ControlTemplate;
ListBox_Main.Items.Add(item);
于 2013-02-23T23:41:34.243 に答える