私のアプリケーションでは、使用しているコンボボックスに角が丸くなるようにする必要があります。私はthis questionへの答えに投稿されたXAMLで始まり、いくつかの変更を加えました。私は私がそれほど多く見える方法が気に入らないと決めたので、私はそれをスタイルして、デフォルトのコンボボックスのように見せてみました。今私のコンボボックスには、次のようになります。、角が丸いWPFコンボボックスを作成する
をし、ドロップダウンするとき:
問題は、ユーザーがコンボボックス上にマウスを置いたときに、それはこのようになっていることである:が。私はSnoopを使用している場合は、私がこの情報を見ることができます:
それはマウスが終わったとき、その境界線の背景の値を示した色であると「#FFBEE6FD」を、設定されていることを 言いますコンボボックス。値のソースは「ParentTemplateTrigger」です。私の問題は、この国境がどこから来ているのか、それがなぜその価値を得ているのか分かりません。私は、背景を白に設定するためのセッターでテンプレートトリガーを追加しようとしましたが、この不思議な境界の値をどこに設定するのかはわかりません。ここで
は私のコンボボックスのためのXAMLです:
<ComboBox x:Name="ScanSizesComboBox"
Style="{StaticResource roundedCornersComboBox}"
Grid.ZIndex="4"
ItemsSource="{Binding ScanSizes}"
SelectedItem="{Binding SelectedScanSize, Mode=TwoWay}"
ToolTip="{Binding (Validation.Errors)[0].ErrorContent}"
Margin="0,10,89,0"
HorizontalAlignment="Right"
Width="61"
Height="26"
VerticalAlignment="Top"
Grid.Row="4">
</ComboBox>
そして、ここではスタイルです:
<Style x:Key="ComboBoxTextBoxStyle" TargetType="{x:Type TextBox}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBox}">
<Grid>
<Border Name="ComboBoxTextBoxStyleBorder" CornerRadius="2"
BorderThickness="0,1,0,1"
Margin="0,0,1,1"
Background="{TemplateBinding Background}">
<Border.Style>
<Style TargetType="Border">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Background" Value="White"/>
</Trigger>
</Style.Triggers>
</Style>
</Border.Style>
<ScrollViewer x:Name="PART_ContentHost"/>
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="IsReadOnly" Value="True"/>
</Style>
<!--Rounded corners combo box-->
<Style TargetType="{x:Type ComboBox}" x:Key="roundedCornersComboBox">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ComboBox}">
<Border Name="roundedCornerComboBoxBorder" BorderBrush="#CCCCCC" BorderThickness="1" CornerRadius="3" ClipToBounds="True" Background="White">
<Border.Style>
<Style TargetType="Border">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Background" Value="White"/>
</Trigger>
</Style.Triggers>
</Style>
</Border.Style>
<Canvas>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBox Name="PART_EditableTextBox"
Panel.ZIndex="0"
Style="{StaticResource ComboBoxTextBoxStyle}"
Padding="0,0,0,0"
IsHitTestVisible="False"
Height="{TemplateBinding Height}">
</TextBox>
<ToggleButton Grid.Column="1" Margin="0, 0, 0, 0"
Panel.ZIndex="1"
HorizontalAlignment="Center"
VerticalAlignment="Center"
BorderBrush="Transparent"
Background="Transparent"
Height="{TemplateBinding Height}"
Width="60"
IsChecked="{Binding Path=IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"
HorizontalContentAlignment="Right"
ClickMode="Press">
<ToggleButton.Style>
<Style TargetType="ToggleButton">
<Style.Triggers>
<Trigger Property="IsMouseOver"
Value="true">
<Setter Property="Background"
Value="White" />
</Trigger>
</Style.Triggers>
</Style>
</ToggleButton.Style>
<Path Grid.Column="1"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Data="M 0 0 L 4 4 L 8 0 Z"
Fill="DodgerBlue" />
</ToggleButton>
<ContentPresenter Name="ContentSite"
Cursor="Arrow"
Content="{TemplateBinding SelectionBoxItem}"
ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}"
ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}"
VerticalAlignment="Center"
HorizontalAlignment="Left"
Margin="3,0,0,0">
</ContentPresenter>
<Popup Name="Popup"
Placement="Bottom"
IsOpen="{TemplateBinding IsDropDownOpen}"
AllowsTransparency="True"
Focusable="False"
PopupAnimation="Slide">
<Grid Name="DropDown"
SnapsToDevicePixels="True"
MinWidth="{TemplateBinding ActualWidth}"
MaxHeight="{TemplateBinding MaxDropDownHeight}">
<Border
x:Name="DropDownBorder"
BorderThickness="1"
CornerRadius="5"
Background="White"
BorderBrush="Black"/>
<ScrollViewer Margin="4,6,4,6" SnapsToDevicePixels="True">
<StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Contained" />
</ScrollViewer>
</Grid>
</Popup>
</Grid>
</Canvas>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
最終的に、私は上の彼/彼女のマウスを置くことができるようにユーザーのための希望しますコンボボックスをクリックして、強調表示されていないときと同じように見えるようにします。どんな助けもありがとうございます。ありがとう。
私は実際には正しいものではなく、詳細に近いものではないことを前にコメントしておきましたので、私はそれをお詫びします。あなたが実際に紛失していることと、本当に丸められる前に解決しなければならない問題は、ComboBoxのデフォルトテンプレートから始まり、次に「ComboBoxToggleButton」、「ComboBoxEditableTextBox」、「ComboBoxItem」、およびそのテンプレートCornerRadiusをオンにする必要がある複数の境界線、完全なスタイリングを実現するためにRadiusX、RadiusYを設定する複数のRectangleがあります。 –
あなたのコメントに基づいて作業し、ComboBoxのデフォルトのテンプレートから始めようとしていました。しかし、テンプレートをインポートして編集しようとすると、コンバータに関するエラーが発生します。これは、テンプレートを変更する前です。エラーは[ここ](http://imgur.com/k7Gclpk)です。私は[MahApps](http://mahapps.com/)を使用していますが、どういうわけかテンプレートはそのフレームワークからコンバーターを使用しようとしていますか?なぜ私は分からない。 – KSF
ああ、既にテンプレート化されたコントロール(mahapps)を使用していて、ちょうどolで開始したと仮定します。右クリック - >テンプレートの編集 - >コピー(または現在の)ルートを編集しますか?あなたはすでにCLRではないかもしれないものを引き出しています。ただちにエラーが発生する場合は、リソースディクショナリにそのコンバータを見つけるための名前空間を追加するだけで簡単です。 MahAppsの詳細は初めに知っておいた方が良いでしょう。 :) –