1

フォームのすべてのborderに次のスタイルを適用しようとしています:

  <UserControl.Resources>

    <Style TargetType="{x:Type Border}">
      <Setter Property="BorderBrush" Value="#5076A7" />
      <Setter Property="BorderThickness" Value="1" />
      <Setter Property="CornerRadius" Value="4" />
    </Style>

    <Style ... />

  <UserControl.Resources>

ただし、値を使用してキーを参照しない限り、 ListView内の境界線と他の境界線のいずれもこのスタイルを選択しません。x:Key FooSyle<Boder Style={StaticResource FooStyle}>

境界については、次のように説明されています。

   <ListView.ItemContainerStyle>
    <Style TargetType="{x:Type ListViewItem}">
      <Style.Setters>
        <Setter Property="Template">
          <Setter.Value>
            <ControlTemplate TargetType="{x:Type ListViewItem}">
              <Border>
                <Grid Margin="2">
                  <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                  </Grid.RowDefinitions>
         ...

ここで何が欠けていますか?

4

3 に答える 3

1

あなたの問題に対して 2 つのスタイル コードを書きました。Style.Resources または ControlTemplate.Resources を使用できます。また、適切な解決策が見つかりました。

コードは次のとおりです: (DynamicResource を使用)

 <Window.Resources>
    <Style x:Key="ListViewItemBorderStyle" TargetType="{x:Type Border}">
        <Setter Property="Background" Value="Red"/>
        <Setter Property="BorderBrush" Value="#5076A7" />
        <Setter Property="BorderThickness" Value="1" />
        <Setter Property="CornerRadius" Value="4" />
    </Style>
</Window.Resources>

 <ListView>
    <ListViewItem Content="asdasd"/>
    <ListViewItem Content="asdasd"/>
    <ListViewItem Content="asdasd"/>
    <ListView.ItemContainerStyle>
        <Style TargetType="{x:Type ListViewItem}">
            <Style.Setters>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type ListViewItem}">
                            <Border Height="100" Style="{DynamicResource ListViewItemBorderStyle}">
                                <!--....-->
                            </Border>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style.Setters>
        </Style>
    </ListView.ItemContainerStyle>
</ListView>

もう 1 つのコード (StaticResource を使用)。ControlTemplate に埋め込まれています。

 <ListView>
    <ListViewItem Content="asdasd"/>
    <ListViewItem Content="asdasd"/>
    <ListViewItem Content="asdasd"/>
    <ListView.ItemContainerStyle>
        <Style TargetType="{x:Type ListViewItem}">
            <Style.Setters>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type ListViewItem}">
                            <ControlTemplate.Resources>
                                <Style x:Key="ListViewItemBorderStyle" TargetType="{x:Type Border}">
                                    <Setter Property="Background" Value="Red"/>
                                    <Setter Property="BorderBrush" Value="#5076A7" />
                                    <Setter Property="BorderThickness" Value="1" />
                                    <Setter Property="CornerRadius" Value="4" />
                                </Style>
                            </ControlTemplate.Resources>
                            <Border Height="100" Style="{DynamicResource ListViewItemBorderStyle}">
                                <!--....-->
                            </Border>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style.Setters>
        </Style>
    </ListView.ItemContainerStyle>
</ListView>
于 2014-11-12T07:24:53.810 に答える
0

Border スタイルをそのスタイルに割り当てることで問題を解決しました。これは、以下のようなネストされたスタイルの概念<Style.Resources>として説明されています。

   <ListView.ItemContainerStyle>
    <Style TargetType="{x:Type ListViewItem}">
      <Style.Setters>
        <Setter Property="Template">
          <Setter.Value>
            <ControlTemplate TargetType="{x:Type ListViewItem}">
              <Border>
                <Grid Margin="2">
                  <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                  </Grid.RowDefinitions>

                ...
                </Grid>
              </Border>
            </ControlTemplate>
          </Setter.Value>
        </Setter>
      </Style.Setters>
      <!--Nested Style-->
      <Style.Resources>
            <Style TargetType="{x:Type Border}">
              <Setter Property="CornerRadius" Value="1" />
            </Style>
            <Style TargetType="{x:Type TextBox}">
              <Setter Property="Background" Value="Transparent" />
              <Setter Property="Foreground" Value="White" />
            </Style>
      </Style.Resources>
    </Style>
  </ListView.ItemContainerStyle>
于 2014-11-12T02:24:39.290 に答える
0

ControlTemplate.Resources に BorderStyle を追加できます

コードは次のとおりです。

  <ListView>
    <ListViewItem Content="asdasd"/>
    <ListViewItem Content="asdasd"/>
    <ListViewItem Content="asdasd"/>
    <ListView.ItemContainerStyle>
        <Style TargetType="{x:Type ListViewItem}">
            <Style.Setters>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type ListViewItem}">
                            <ControlTemplate.Resources>
                                <Style x:Key="ListViewItemBorderStyle" TargetType="{x:Type Border}">
                                    <Setter Property="Background" Value="Red"/>
                                    <Setter Property="BorderBrush" Value="#5076A7" />
                                    <Setter Property="BorderThickness" Value="1" />
                                    <Setter Property="CornerRadius" Value="4" />
                                </Style>
                            </ControlTemplate.Resources>
                            <Border Height="100" Style="{StaticResource ListViewItemBorderStyle}">
                             <!--....-->
                            </Border>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style.Setters>
        </Style>
    </ListView.ItemContainerStyle>
</ListView>
于 2014-11-11T08:26:45.670 に答える