Skip to content

Instantly share code, notes, and snippets.

@hilapon
Last active August 29, 2015 14:13
Show Gist options
  • Save hilapon/4100858aaf8c2799d9d1 to your computer and use it in GitHub Desktop.
Save hilapon/4100858aaf8c2799d9d1 to your computer and use it in GitHub Desktop.
[WPF] : ドロップダウン付き TextBox のサンプル
<Style x:Key="TextBoxStyle1" TargetType="{x:Type TextBox}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBox}">
<Border>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="24" />
</Grid.ColumnDefinitions>
<Microsoft_Windows_Themes:ListBoxChrome
x:Name="Bd"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}"
RenderMouseOver="{TemplateBinding IsMouseOver}"
RenderFocused="{TemplateBinding IsKeyboardFocusWithin}"
SnapsToDevicePixels="true">
<ScrollViewer x:Name="PART_ContentHost"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</Microsoft_Windows_Themes:ListBoxChrome>
<ToggleButton Grid.Column="1" x:Name="ToggleButton1" >
<!-- 下矢印 -->
<ed:RegularPolygon Height="9" Width="9"
InnerRadius="90" PointCount="3" Stroke="Gray"
RenderTransformOrigin="0.5,0.5" Fill="cornflowerblue">
<ed:RegularPolygon.RenderTransform>
<TransformGroup>
<RotateTransform Angle="180"/>
</TransformGroup>
</ed:RegularPolygon.RenderTransform>
</ed:RegularPolygon>
</ToggleButton>
<Popup x:Name="Popup1"
PlacementTarget="{Binding ElementName=Button1}"
PopupAnimation="Fade" Height="Auto" Margin="0,0,0,-46">
<TextBox x:Name="PopupText" Width="Auto" Height="Auto"
AcceptsReturn="True" TextWrapping="Wrap" IsReadOnly="True"
Text="{TemplateBinding Text}" />
</Popup>
</Grid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Background" TargetName="Bd"
Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
<Setter Property="Foreground"
Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
</Trigger>
<!-- ドロップダウン制御 -->
<DataTrigger Binding="{Binding IsChecked, ElementName=ToggleButton1}"
Value="True">
<Setter TargetName="Popup1" Property="IsOpen" Value="True" />
</DataTrigger>
<DataTrigger Binding="{Binding IsFocused, ElementName=PopupText}" Value="True">
<Setter TargetName="Popup1" Property="IsOpen" Value="True" />
</DataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsFocused, ElementName=PopupText}"
Value="False" />
<Condition Binding="{Binding IsFocused, ElementName=ToggleButton1}"
Value="False" />
</MultiDataTrigger.Conditions>
<Setter TargetName="ToggleButton1" Property="IsChecked" Value="False" />
</MultiDataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment