C# 如何在组合框内容模板中有两个可编辑的文本框?
我希望在C# 如何在组合框内容模板中有两个可编辑的文本框?,c#,wpf,textbox,C#,Wpf,Textbox,我希望在组合框模板中有两个文本框s,如下图所示: 我已从MSDN修改了控件模板。这有一个问题:我无法标记内部TextBoxes 在单个文本框中包含多个文本框是否正确 如果答案是否定的,那么替换TextBox的最佳控件是什么 代码: <UserControl x:Class="SearchableListBox_keyNavigator.TrackNameControl" xmlns="http://schemas.microsoft.com/winfx/200
组合框
模板中有两个文本框
s,如下图所示:
我已从MSDN修改了控件模板。这有一个问题:我无法标记内部TextBoxe
s
在单个文本框中包含多个文本框是否正确
如果答案是否定的,那么替换TextBox
的最佳控件是什么
代码:
<UserControl x:Class="SearchableListBox_keyNavigator.TrackNameControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:SearchableListBox_keyNavigator"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<UserControl.Resources>
<LinearGradientBrush x:Key="ProgressBarIndicatorAnimatedFill"
StartPoint="0,0"
EndPoint="1,0">
<LinearGradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Color="#000000FF"
Offset="0" />
<GradientStop Color="White"
Offset="0.4" />
<GradientStop Color="MintCream"
Offset="0.6" />
<GradientStop Color="#000000FF"
Offset="1" />
</GradientStopCollection>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
<ControlTemplate x:Key="ComboBoxToggleButton"
TargetType="{x:Type ToggleButton}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="20" />
</Grid.ColumnDefinitions>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal" />
<VisualState x:Name="MouseOver">
<Storyboard>
<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).
(GradientBrush.GradientStops)[1].(GradientStop.Color)"
Storyboard.TargetName="Border">
<EasingColorKeyFrame KeyTime="0"
Value="{StaticResource ControlPressedColor}" />
</ColorAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Pressed" />
<VisualState x:Name="Disabled">
<Storyboard>
<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).
(GradientBrush.GradientStops)[1].(GradientStop.Color)"
Storyboard.TargetName="Border">
<EasingColorKeyFrame KeyTime="0"
Value="{StaticResource DisabledControlDarkColor}" />
</ColorAnimationUsingKeyFrames>
<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Fill).
(SolidColorBrush.Color)"
Storyboard.TargetName="Arrow">
<EasingColorKeyFrame KeyTime="0"
Value="{StaticResource DisabledForegroundColor}" />
</ColorAnimationUsingKeyFrames>
<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush).
(GradientBrush.GradientStops)[1].(GradientStop.Color)"
Storyboard.TargetName="Border">
<EasingColorKeyFrame KeyTime="0"
Value="{StaticResource DisabledBorderDarkColor}" />
</ColorAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="CheckStates">
<VisualState x:Name="Checked">
<Storyboard>
<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).
(GradientBrush.GradientStops)[1].(GradientStop.Color)"
Storyboard.TargetName="Border">
<EasingColorKeyFrame KeyTime="0"
Value="{StaticResource ControlPressedColor}" />
</ColorAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Unchecked" />
<VisualState x:Name="Indeterminate" />
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Border x:Name="Border"
Grid.ColumnSpan="2"
CornerRadius="2"
BorderThickness="1">
<Border.BorderBrush>
<LinearGradientBrush EndPoint="0,1"
StartPoint="0,0">
<GradientStop Color="{DynamicResource BorderLightColor}"
Offset="0" />
<GradientStop Color="{DynamicResource BorderDarkColor}"
Offset="1" />
</LinearGradientBrush>
</Border.BorderBrush>
<Border.Background>
<LinearGradientBrush StartPoint="0,0"
EndPoint="0,1">
<LinearGradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Color="{DynamicResource ControlLightColor}" />
<GradientStop Color="{DynamicResource ControlMediumColor}"
Offset="1.0" />
</GradientStopCollection>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</Border.Background>
</Border>
<Border Grid.Column="0"
CornerRadius="2,0,0,2"
Margin="1" >
<Border.Background>
<SolidColorBrush Color="{DynamicResource ControlLightColor}"/>
</Border.Background>
</Border>
<Path x:Name="Arrow"
Grid.Column="1"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Data="M2.33496 0.802746C2.33496 0.397737 2.66329 0.0694122 3.06829 0.0694122C3.4733 0.0694122 3.80163 0.397737 3.80163 0.802746V2.06941H6.54004V0.802746C6.54004 0.397737 6.86836 0.0694122 7.27337 0.0694122C7.67838 0.0694122 8.00671 0.397737 8.00671 0.802746V2.06941H9.41028C9.68643 2.06941 9.91029 2.29327 9.91029 2.56941C9.91029 2.84555 9.68643 3.06941 9.41029 3.06941H8.00671V5.56941H9.41028C9.68643 5.56941 9.91029 5.79327 9.91029 6.06941C9.91029 6.34555 9.68643 6.56941 9.41029 6.56941H8.00671V9.06941H9.41028C9.68643 9.06941 9.91029 9.29327 9.91029 9.56941C9.91029 9.84555 9.68643 10.0694 9.41029 10.0694H8.00671V11.3361C8.00671 11.7411 7.67838 12.0694 7.27337 12.0694C6.86836 12.0694 6.54004 11.7411 6.54004 11.3361V10.0694H3.80163V11.3361C3.80163 11.7411 3.4733 12.0694 3.06829 12.0694C2.66329 12.0694 2.33496 11.7411 2.33496 11.3361V10.0694H0.876954C0.600811 10.0694 0.376953 9.84555 0.376953 9.56941C0.376953 9.29327 0.600811 9.06941 0.876953 9.06941H2.33496V6.56941H0.876954C0.600811 6.56941 0.376953 6.34555 0.376953 6.06941C0.376953 5.79327 0.600811 5.56941 0.876953 5.56941H2.33496V3.06941H0.876954C0.600811 3.06941 0.376953 2.84555 0.376953 2.56941C0.376953 2.29327 0.600811 2.06941 0.876953 2.06941H2.33496V0.802746ZM3.80163 9.06941H6.54004V6.56941H3.80163V9.06941ZM6.54004 3.06941V5.56941H3.80163V3.06941H6.54004Z">
<Path.Fill>
<SolidColorBrush Color="#8E8E8E"/>
</Path.Fill>
</Path>
</Grid>
</ControlTemplate>
<ControlTemplate x:Key="ComboBoxTextBox">
<StackPanel Orientation="Horizontal" Width="290" >
<TextBox x:Name="KMValueText" Width="40" PreviewTextInput="UIElement_OnPreviewTextInput" Height="{TemplateBinding TextBox.Template}" Text="{Binding Path=KMText,Mode=TwoWay ,RelativeSource={RelativeSource FindAncestor,
AncestorType=local:TrackNameControl,
AncestorLevel=1},UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Center" HorizontalAlignment="Left" VerticalContentAlignment="Center"
TextAlignment="Left" GotFocus="Text_OnGotFocus" PreviewKeyDown="Mycombo_PreviewKeyDown" TabIndex="0" Style="{StaticResource TextBoxFocusStyle}" >
</TextBox>
<TextBlock Width="auto" Background="Transparent" Text="km " FontStyle="Italic" VerticalAlignment="Center" HorizontalAlignment="Center" >
<TextBlock.Style>
<Style TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding IsFocused ,ElementName=KMValueText}" Value="False">
<Setter Property="Foreground" Value="Gray"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
<TextBlock Width="Auto" Text="@" FontStyle="Italic" Background ="Transparent" VerticalAlignment="Center" HorizontalAlignment="Center" >
<TextBlock.Style>
<Style TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding IsFocused ,ElementName=TrackNameText}" Value="False">
<Setter Property="Foreground" Value="Gray"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
<Border x:Name="TrackBorder">
<TextBox x:Name="TrackNameText" Width="190" Height="{TemplateBinding TextBox.Template}" Text="{Binding Path=TrackText,Mode=TwoWay,RelativeSource={RelativeSource FindAncestor,
AncestorType=local:TrackNameControl,
AncestorLevel=1}, UpdateSourceTrigger=PropertyChanged}"
ToolTip="{Binding Path=TrackText}" VerticalAlignment="Center"
HorizontalAlignment="Right"
VerticalContentAlignment="Center" Style="{StaticResource TextBoxFocusStyle}" IsEnabled="{Binding Path=IsStartKmMarker,RelativeSource={RelativeSource FindAncestor,AncestorType= local:TrackNameControl, AncestorLevel=1}}" GotFocus="Text_OnGotFocus" PreviewKeyDown="Mycombo_PreviewKeyDown">
<!--<TextBox.CommandBindings>
<CommandBinding Command="Delete" Executed="DeleteAll"></CommandBinding>
</TextBox.CommandBindings>
<TextBox.InputBindings>
<KeyBinding Key="Delete" Command="Delete" ></KeyBinding>
</TextBox.InputBindings>-->
</TextBox>
</Border>
</StackPanel>
</ControlTemplate>
<Style x:Key="{x:Type ComboBox}"
TargetType="{x:Type ComboBox}">
<Setter Property="SnapsToDevicePixels"
Value="true" />
<Setter Property="OverridesDefaultStyle"
Value="true" />
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility"
Value="Auto" />
<Setter Property="ScrollViewer.VerticalScrollBarVisibility"
Value="Auto" />
<Setter Property="ScrollViewer.CanContentScroll"
Value="true" />
<Setter Property="MinWidth"
Value="120" />
<Setter Property="MinHeight"
Value="20" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ComboBox}">
<Grid>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal" />
<VisualState x:Name="MouseOver" />
<VisualState x:Name="Disabled">
<Storyboard>
<ColorAnimationUsingKeyFrames Storyboard.TargetName="PART_EditableTextBox"
Storyboard.TargetProperty="(TextElement.Foreground).
(SolidColorBrush.Color)">
<EasingColorKeyFrame KeyTime="0"
Value="{StaticResource DisabledForegroundColor}" />
</ColorAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="EditStates">
<VisualState x:Name="Editable">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)"
Storyboard.TargetName="PART_EditableTextBox">
<DiscreteObjectKeyFrame KeyTime="0"
Value="{x:Static Visibility.Visible}" />
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames
Storyboard.TargetProperty="(UIElement.Visibility)"
Storyboard.TargetName="ContentSite">
<DiscreteObjectKeyFrame KeyTime="0"
Value="{x:Static Visibility.Hidden}" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Uneditable" />
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<ToggleButton x:Name="ToggleButton"
Template="{StaticResource ComboBoxToggleButton}" PreviewKeyDown="Mycombo_PreviewKeyDown"
Grid.Column="2"
Focusable="false"
ClickMode="Press"
IsChecked="{Binding IsDropDownOpen, Mode=TwoWay,
RelativeSource={RelativeSource TemplatedParent}}"/>
<ContentPresenter x:Name="ContentSite"
IsHitTestVisible="False"
Content="{TemplateBinding SelectionBoxItem}"
ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}"
ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}"
Margin="3,3,23,3"
VerticalAlignment="Stretch"
HorizontalAlignment="Left">
</ContentPresenter>
<!--<StackPanel Orientation="Horizontal" Width="250" x:Name="PART_EditableTextBox" >
<TextBox KeyboardNavigation.TabIndex="0" x:Name="KMValueText" Width="40" BorderBrush="Transparent" Text="{Binding Path=KMText,Mode=TwoWay ,RelativeSource={RelativeSource FindAncestor,
AncestorType=local:TrackNameControl,
AncestorLevel=1},UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Center" HorizontalAlignment="Left" VerticalContentAlignment="Center"
TextAlignment="Right" GotFocus="Text_OnGotFocus" PreviewKeyDown="Mycombo_PreviewKeyDown" TabIndex="0" >
</TextBox>
<TextBlock Width="auto" Background="Transparent" Text="km " FontStyle="Italic" VerticalAlignment="Center" HorizontalAlignment="Center" >
<TextBlock.Style>
<Style TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding IsFocused ,ElementName=KMValueText}" Value="False">
<Setter Property="Foreground" Value="Gray"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
<TextBlock Width="Auto" Text="@" FontStyle="Italic" Background ="Transparent" VerticalAlignment="Center" HorizontalAlignment="Center" >
<TextBlock.Style>
<Style TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding IsFocused ,ElementName=TrackNameText}" Value="False">
<Setter Property="Foreground" Value="Gray"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
<Border x:Name="TrackBorder">
<TextBox x:Name="TrackNameText" KeyboardNavigation.TabIndex="1" Width="130" BorderBrush="Transparent" Text="{Binding Path=TrackText,Mode=TwoWay,RelativeSource={RelativeSource FindAncestor,
AncestorType=local:TrackNameControl,
AncestorLevel=1}, UpdateSourceTrigger=PropertyChanged}"
ToolTip="{Binding Path=TrackText}" VerticalAlignment="Center"
HorizontalAlignment="Right"
VerticalContentAlignment="Center" TabIndex="1" IsEnabled="{Binding Path=IsStartKmMarker,RelativeSource={RelativeSource FindAncestor,AncestorType= local:TrackNameControl, AncestorLevel=1}}" GotFocus="Text_OnGotFocus" PreviewKeyDown="Mycombo_PreviewKeyDown">
</TextBox>
</Border>
</StackPanel>-->
<TextBox x:Name="PART_EditableTextBox"
Style="{x:Null}"
Template="{StaticResource ComboBoxTextBox}"
HorizontalAlignment="Left"
VerticalAlignment="Bottom"
Margin="3,3,23,3"
Focusable="True"
Background="Transparent"
Visibility="Hidden"
IsReadOnly="{TemplateBinding IsReadOnly}" IsTabStop="True" />
<Popup x:Name="_popup" KeyboardNavigation.TabIndex="3"
Placement="Bottom"
IsOpen="{TemplateBinding IsDropDownOpen}"
AllowsTransparency="True"
Focusable="False"
PopupAnimation="Slide">
<Grid x:Name="DropDown"
SnapsToDevicePixels="True"
MinWidth="{TemplateBinding ActualWidth}"
MaxHeight="{TemplateBinding MaxDropDownHeight}">
<Border x:Name="DropDownBorder"
BorderThickness="1">
<Border.BorderBrush>
<SolidColorBrush Color="{DynamicResource BorderMediumColor}" />
</Border.BorderBrush>
<Border.Background>
<SolidColorBrush Color="{DynamicResource ControlLightColor}" />
</Border.Background>
</Border>
<ScrollViewer Margin="4,6,4,6"
SnapsToDevicePixels="True">
<StackPanel IsItemsHost="True"
KeyboardNavigation.DirectionalNavigation="Contained" />
</ScrollViewer>
</Grid>
</Popup>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="HasItems"
Value="false">
<Setter TargetName="DropDownBorder"
Property="MinHeight"
Value="95" />
</Trigger>
<Trigger Property="IsGrouping"
Value="true">
<Setter Property="ScrollViewer.CanContentScroll"
Value="false" />
</Trigger>
<Trigger SourceName="_popup"
Property="AllowsTransparency"
Value="False">
<Setter TargetName="DropDownBorder"
Property="CornerRadius"
Value="4" />
<Setter TargetName="DropDownBorder"
Property="Margin"
Value="0,2,0,0" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="{x:Type ComboBoxItem}"
TargetType="{x:Type ComboBoxItem}">
<Setter Property="SnapsToDevicePixels"
Value="true" />
<Setter Property="OverridesDefaultStyle"
Value="true" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ComboBoxItem}">
<Border x:Name="Border"
Padding="2"
SnapsToDevicePixels="true"
Background="Transparent">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="SelectionStates">
<VisualState x:Name="Unselected" />
<VisualState x:Name="Selected">
<Storyboard>
<ColorAnimationUsingKeyFrames Storyboard.TargetName="Border"
Storyboard.TargetProperty="(Panel.Background).
(SolidColorBrush.Color)">
<EasingColorKeyFrame KeyTime="0"
Value="{StaticResource ControlPressedColor}" />
</ColorAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="SelectedUnfocused">
<Storyboard>
<ColorAnimationUsingKeyFrames Storyboard.TargetName="Border"
Storyboard.TargetProperty="(Panel.Background).
(SolidColorBrush.Color)">
<EasingColorKeyFrame KeyTime="0"
Value="{StaticResource ControlPressedColor}" />
</ColorAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<TextBlock Text="{Binding Item3}" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
<Grid>
<ComboBox x:Name="TrackComboBoxEx" IsEditable="True"
Width="230"
Height="25"
IsTextSearchEnabled="True"
ItemsSource="{Binding Path=ItemsSource,RelativeSource={RelativeSource FindAncestor,AncestorType=local:TrackNameControl,AncestorLevel=1}}" SelectedItem="{Binding Path=SelectedItem , RelativeSource={RelativeSource FindAncestor,AncestorType=local:TrackNameControl,AncestorLevel=1}}"
SelectionChanged="Mycombo_SelectionChanged" PreviewKeyDown="Mycombo_PreviewKeyDown" PreviewMouseDown="TrackComboBoxEx_OnPreviewMouseDown" >
</ComboBox>
</Grid>
</UserControl>