1

コンボボックスでカスタムプロパティセットを取得する際に問題が発生しました。.Net 4.0、辞書で設定されたタイプのxamlリソース、およびapp.xamlで設定されたいくつかのブラシを備えたWPFを使用しています。周囲の「境界線」トリックを使用して、コンボボックスを見つけるだけで丸みを帯びた素敵なコーナーとグラデーションとレイアウトを取得できます。ただし、コンボボックスの「選択したアイテム」の背景がくすんだ灰色以外になるように見えません。透明に変更して、親の境界線のグラデーションを継承したいと思います。しかし、私はこれを行うためのプロパティまたは関係がありません。

誰かがxamlでこれを行う方法を知っていますか?

画像:

選択および選択されたコンボボックスの現在の表示

コード:

辞書項目:

  <Style TargetType="{x:Type Border}">
        <Setter Property="Background" Value="{StaticResource MoneyBrush}" />
        <Setter Property="BorderBrush" Value="#071C07" />
    <Setter Property="BorderThickness" Value="3" />
    <Setter Property="CornerRadius" Value="20" />
    <Setter Property="SnapsToDevicePixels" Value="True" />
  </Style>

メインのApp.xamlのブラシ:

<LinearGradientBrush x:Key="MoneyBrush" EndPoint="0.5,1" StartPoint="0.5,0">
            <GradientStop Color="#3A883A" Offset="1" />
            <GradientStop Color="#FFFFFF" Offset="0" />
            <GradientStop Color="#FF53AA75" Offset="0.50" />
            <GradientStop Color="#073307" Offset="0.95" />
        </LinearGradientBrush>
<LinearGradientBrush x:Key="FontBrush" EndPoint="0.5,1" StartPoint="0.5,0">
            <GradientStop Color="Black" Offset="0" />
            <GradientStop Color="#107810" Offset="0.50" />
            <GradientStop Color="Black" Offset="0.65" />
        </LinearGradientBrush>

メインウィンドウの実際のアイテム:

<Border Margin="5" >
                    <ComboBox Height="30" Width="170" Margin="10" x:Name="combopersons" 
                    FontSize="20"
                    ItemsSource="{Binding Path=People}"
                    DisplayMemberPath="FirstName"
                    SelectedValuePath="PersonId"
                    SelectedValue="{Binding Path=CurrentUser}"
                    Foreground="{StaticResource FontBrush}">
                    </ComboBox>
                </Border>

編集>>>

@iltzortzによって提案されたソリューションが好きですが、グラデーションが必要だったので、この場合はこれでうまくいくでしょう:

<ComboBox.Resources>
    <LinearGradientBrush x:Key="{x:Static SystemColors.WindowBrushKey}" >
        <GradientStop Color="#3A883A" Offset="1" />
        <GradientStop Color="#FFFFFF" Offset="0" />
        <GradientStop Color="#FF53AA75" Offset="0.50" />
        <GradientStop Color="#073307" Offset="0.95" />
    </LinearGradientBrush>
    <LinearGradientBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" >
        <GradientStop Color="#000000" Offset="1" />
        <GradientStop Color="#FFFFFF" Offset="0" />
    </LinearGradientBrush>
</ComboBox.Resources>

編集2>>>

何らかの理由で、これはWindows7を搭載したVisualStudio2012で.NET4.0以降を使用して構築したアプリケーションでのみ機能します。何らかの理由で自宅でコードを実行しようとすると、レンダリングされません。これはどちらかが原因であると考えられます。 Windows8またはVisualStudio2010は、さまざまなシステム値に対してさまざまな色を解釈します。Windows8またはVisualStudio2010を使用している場合は、一方の環境では機能しますが、もう一方の環境では機能しないため、この点に注意してください...好奇心が強いです。

4

1 に答える 1

1

次のコードは仕事をしているようです

<Grid Background="Pink">

    <ComboBox Margin="10,0" Width="100" Height="40">
        <ComboBoxItem>1</ComboBoxItem>
        <ComboBoxItem>2</ComboBoxItem>            
        <ComboBoxItem>3</ComboBoxItem>
        <ComboBox.Resources>
            <SolidColorBrush x:Key="{x:Static SystemColors.WindowBrushKey}" Color="Green" />
            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Green" />
        </ComboBox.Resources>            
    </ComboBox>

    <TextBox VerticalAlignment="Top" Margin="10"/>
</Grid>
于 2013-01-16T15:18:54.427 に答える