0

ListBox とその項目をスタイリングするための私の簡単なコード:

    <Style x:Key="SelectorPanelListBoxStyle" TargetType="{x:Type ListBox}">
    <Setter Property="Background" Value="{x:Null}"/>
    <Setter Property="Foreground" Value="White"/>
    <Setter Property="Border.CornerRadius" Value="2"/>
    <Setter Property="ItemTemplate" x:Name="MyItemTemplate">

        <Setter.Value>
            <DataTemplate >
                <Border BorderBrush="White" BorderThickness="1" CornerRadius="5" OverridesDefaultStyle="True">
                    <Grid Height="57" Width="145">

                            <Label Content="{TemplateBinding Content}" />

                            <ContentControl Content="{Binding}" Foreground="White" />

                        </Grid>
                        </Border>

            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>

私のスタイルのそれぞれは、プロジェクトのリソース セクションにリソース ライブラリ ファイルとして保存され、App.xaml によって参照される ResourceLibrary マスター ファイルの「マージされた辞書」としてリンクされます。使用中のこれらのスタイルの。

次の例と同様に、ビューでスタイルを使用します。

 <ListBox Style="{StaticResource SelectorPanelListBoxStyle}" ..../>

残念ながら、BorderBrush、BorderThickness、CornerRadius などはブレンドのブレッドクラム エディターにのみ表示され、スタイルが実際に使用されている場合は適用されません。時にはそうでもない。私は何を間違っていますか?

前もって感謝します!

4

1 に答える 1

1

<ControlTemplate>の代わりに aを使用する必要があると思います<DataTemplate>。上記のスタイルを次のように書きます。

<Style x:Key="SelectorPanelListBoxStyle" TargetType="{x:Type ListBox}">
<Setter Property="Background" Value="{x:Null}"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="Border.CornerRadius" Value="2"/>
<Setter Property="ItemTemplate" x:Name="MyItemTemplate">
    <Setter.Value>
        <ControlTemplate>
            <Border BorderBrush="White" BorderThickness="1" CornerRadius="5" OverridesDefaultStyle="True">
                <Grid Height="57" Width="145">
                    <Label Content="{TemplateBinding Content}" />
                    <ContentControl Content="{Binding}" Foreground="White" />
                </Grid>
            </Border>
        </ControlTemplate>
    </Setter.Value>
</Setter>
</Style>

私自身の ListBox スタイルの 1 つを以下に示します。

    <Style TargetType="{x:Type ListBox}">
        <Setter Property="BorderThickness" Value="0"/>
        <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
        <Setter Property="VerticalContentAlignment" Value="Center"/>
        <Setter Property="AllowDrop" Value="True"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ListBox}">
                    <Border BorderThickness="0">
                        <ScrollViewer Margin="0">
                            <StackPanel Margin="0" IsItemsHost="True"/>
                        </ScrollViewer>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <DataTemplate x:Key="GridViewTemplate">
        <Border BorderBrush="LightBlue" BorderThickness="0" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" CornerRadius="0">
            <Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
                <DockPanel VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
                    <TextBlock FontFamily="Segoe UI Light" FontSize="18" Text="{Binding PropFullName}" Margin="2,2,2,2" DockPanel.Dock="Top"/>
                    <TextBlock FontFamily="Segoe UI Light" FontSize="18" Text="{Binding PropTitle}" Margin="2,2,2,2" DockPanel.Dock="Top"/>
                </DockPanel>
            </Grid>
        </Border>
    </DataTemplate>

DataTemplate は次のように設定されます。

    <ListBox.ItemTemplate>
         <StaticResource ResourceKey="GridViewTemplate"/>
    </ListBox.ItemTemplate>

編集1:

        <DataTemplate x:Key="MyListBoxTemplate">
            <Border BorderBrush="White" BorderThickness="1" CornerRadius="5" OverridesDefaultStyle="True">
                <Grid Height="57" Width="145">
                    <Label Content="{TemplateBinding Content}" />
                    <ContentControl Content="{Binding}" Foreground="White" />
                </Grid>
            </Border>
        </DateTemplate>

    <Style TargetType="{x:Type ListBox}">
        <Setter Property="BorderThickness" Value="0"/>
        <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
        <Setter Property="VerticalContentAlignment" Value="Center"/>
        <Setter Property="AllowDrop" Value="True"/>
        <Setter Property="ItemTemplate">
            <Setter.Value>
                <StaticResource ResourceKey="MyListBoxItemTemplate"
            </Setter.Value>
        </Setter>
    </Style>
于 2012-12-13T13:02:41.620 に答える