答えて
DependencyPropertyを使用すると、スタイル/テンプレートを変更せずにコンボボックスのmaxlengthを設定できます。
public class EditableComboBox
{
public static int GetMaxLength(DependencyObject obj)
{
return (int)obj.GetValue(MaxLengthProperty);
}
public static void SetMaxLength(DependencyObject obj, int value)
{
obj.SetValue(MaxLengthProperty, value);
}
// Using a DependencyProperty as the backing store for MaxLength. This enables animation, styling, binding, etc...
public static readonly DependencyProperty MaxLengthProperty = DependencyProperty.RegisterAttached("MaxLength", typeof(int), typeof(EditableComboBox), new UIPropertyMetadata(OnMaxLenghtChanged));
private static void OnMaxLenghtChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
{
var comboBox = obj as ComboBox;
if (comboBox == null) return;
comboBox.Loaded +=
(s, e) =>
{
var textBox = comboBox.FindChild(typeof(TextBox), "PART_EditableTextBox");
if (textBox == null) return;
textBox.SetValue(TextBox.MaxLengthProperty, args.NewValue);
};
}
}
使用例:
ComboboxHelperは<ComboBox ComboboxHelper:EditableComboBox.MaxLength="50" />
:
のxmlns:ComboboxHelper = "clr- 名前空間:yourNameSpace;アセンブリ= yourAssembly"
comboBox.FindChild(...)メソッドが投稿されましたhere。
ありがとうトライQ ..もう一度ありがとう。 – Ershad
あなたは正しいですか?テキストボックスには最大長がありますが、コンボボックスにはありません。テキストボックスを仲介者として使用して自分自身をロールバックする必要があります。ここにいくつかのコードがあります:
public int MaxLength {get; set;}
protected override void OnGotFocus(System.Windows.RoutedEventArgs e)
{
base.OnGotFocus(e);
TextBox thisTextBox = (TextBox)base.GetTemplateChild("PART_EditableTextBox");
if (thisTextBox != null)
thisTextBox.MaxLength = MaxLength;
}
このTextBoxはnullになります。 与えられたスタイルは以下の通りです。
<ControlTemplate x:Key="ComboBoxToggleButton" TargetType="ToggleButton">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="{Binding Path=(local:ToggleComboBox.Width),
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ComboBox}}}" />
</Grid.ColumnDefinitions>
<Border x:Name="Border"
Grid.Column="1"
CornerRadius="2"
Background="#CCFFCC"
BorderBrush="#000080"
BorderThickness="4" />
<Border Grid.Column="0"
CornerRadius="8,8,8,8"
Margin="0"
Background="#CCFFCC"
BorderBrush="#000080"
BorderThickness="4,4,4,4" />
<Image x:Name="Arrow"
Grid.Column="1"
Source="Arrow.png" Margin="4,4,4,4"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="ToggleButton.IsMouseOver" Value="true">
<Setter TargetName="Border" Property="Background" Value="{StaticResource DarkBrush}" />
</Trigger>
<Trigger Property="ToggleButton.IsChecked" Value="true">
<Setter TargetName="Border" Property="Background" Value="{StaticResource PressedBrush}" />
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="Border" Property="Background" Value="{StaticResource DisabledBackgroundBrush}" />
<Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource DisabledBorderBrush}" />
<Setter Property="Foreground" Value="{StaticResource DisabledForegroundBrush}"/>
<!--<Setter TargetName="Arrow" Property="Fill" Value="{StaticResource DisabledForegroundBrush}" />-->
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
<ControlTemplate x:Key="ComboBoxTextBox" TargetType="TextBox">
<Border x:Name="PART_ContentHost" Focusable="False" Background="{TemplateBinding Background}" />
</ControlTemplate>
<Style x:Key="ComboBoxStyle" TargetType="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="ComboBox">
<Grid>
<ToggleButton Name="ToggleButton"
Template="{StaticResource ComboBoxToggleButton}"
Grid.Column="2"
Focusable="false"
IsChecked="{Binding Path=IsDropDownOpen,
Mode=TwoWay,
RelativeSource={RelativeSource TemplatedParent}}"
ClickMode="Press"/>
<ContentPresenter Name="ContentSite"
IsHitTestVisible="False"
Content="{TemplateBinding SelectionBoxItem}"
ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}"
ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}"
Margin="9,2,28,2"
VerticalAlignment="Center"
HorizontalAlignment="Left" />
<TextBox x:Name="PART_EditableTextBox"
Style="{x:Null}"
Template="{StaticResource ComboBoxTextBox}"
HorizontalAlignment="Left"
VerticalAlignment="Center"
Margin="3,3,23,3"
Focusable="True"
Background="Transparent"
Visibility="Hidden"
IsReadOnly="{TemplateBinding IsReadOnly}"/>
<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"
Background="#CCFFCC"
BorderBrush="#000080"
BorderThickness="2"/>
<ScrollViewer Margin="4,6,4,6" SnapsToDevicePixels="True">
<ScrollViewer.Resources>
<sys:Double x:Key="{x:Static SystemParameters.VerticalScrollBarWidthKey}">25</sys:Double>
</ScrollViewer.Resources>
<StackPanel IsItemsHost="True" />
</ScrollViewer>
</Grid>
</Popup>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="HasItems" Value="false">
<Setter TargetName="DropDownBorder" Property="MinHeight" Value="95"/>
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="{StaticResource DisabledForegroundBrush}"/>
</Trigger>
<Trigger Property="IsGrouping" Value="true">
<Setter Property="ScrollViewer.CanContentScroll" Value="false"/>
</Trigger>
<Trigger SourceName="Popup" Property="Popup.AllowsTransparency" Value="true">
<Setter TargetName="DropDownBorder" Property="CornerRadius" Value="4"/>
<Setter TargetName="DropDownBorder" Property="Margin" Value="0,2,0,0"/>
</Trigger>
<Trigger Property="IsEditable" Value="true">
<Setter Property="IsTabStop" Value="false"/>
<Setter TargetName="PART_EditableTextBox" Property="Visibility" Value="Visible"/>
<Setter TargetName="ContentSite" Property="Visibility" Value="Hidden"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="ItemContainerStyle" >
<Setter.Value>
<Style TargetType="{x:Type ComboBoxItem}">
<Setter Property="FontSize" Value="20" />
</Style>
</Setter.Value>
</Setter>
</Style>
それとも、あなたがロードされたイベントを使用するか、他のGotFocusイベントに
<ComboBox Height="30" IsEditable="True" Loaded="ComboBox_Loaded"/>
としてを使用することができ、実行時にあまりにも多くの変更doestのGotFocusまたはmaxlength.IfにMAXLENGTHを設定するためのコンボボックスのLoadedイベントを使用することができますそれぞれのイベント...
var obj = (ComboBox)sender;
if (obj != null)
{
var myTextBox = (TextBox)obj.Template.FindName("PART_EditableTextBox",obj);
if (myTextBox != null)
{
myTextBox.MaxLength = maxLength;
}
}
私はXAML経由で簡単な解決策を見つけました。 comboBoxリソースでは、textboxとsetter set maxlenthのスタイルを設定できます。
<ComboBox Name="comboBox" Width="100" IsEditable="True">
<ComboBox.Resources>
<Style TargetType="{x:Type TextBox}">
<Setter Property="MaxLength" Value="yourValue"></Setter>
</Style>
</ComboBox.Resources>
</ComboBox>
EDIT:これはActipro ComboBoxで動作します。通常のコンボボックスのために、この作品を作るには、here
私はPreviewKeyDownイベントを使用して、非常に簡単な+あなたは警告や何かを表示することができます。
以下のメソッドをComboBox.PreviewKeyDown + =イベントに登録します。
ユーザーがSpaceキーを押した場合、KeyDownイベントは発生しません。
private void ComboBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (ComboBox.Text.Length > 19) // allow max 20 chars
{
if (e.Key != Key.Back) // allow removing chars
{
e.Handled = true; // block any additional key press if there is more than allowed max
System.Media.SystemSounds.Beep.Play(); // optional: beep to let user know he is out of space :)
}
}
}
- 1. WPF DataGrid内でコンボボックスのスタイルを設定する方法は?
- 2. 設定MAXLENGTH ::数(
- 3. wpf、TextBoxのMaxLengthを制限する方法は?
- 4. react-rteエディタのmaxlengthプロパティを設定する方法
- 5. 設定方法Swtコンボボックスのデフォルト値は?
- 6. フレックスのコンボボックスでアイテムのインデックスを設定する方法は?
- 7. イオン1入力タイプのmaxlengthの設定方法は?
- 8. コンボボックスをツールチップwpfにバインドする方法
- 9. コンボボックスでスクロールバーをトップから設定する方法は?
- 10. DataGridViewコンボボックス列のオートコンプリートの設定方法
- 11. jQueryコンボボックスのTabIndexを設定する方法は?
- 12. laravel 5にコンボボックスの選択値を設定する方法は?
- 13. Telerikコンボボックスのクライアント側で経路値を設定する方法
- 14. devexpressコンボボックスでSelectedItemプロパティの値を設定する方法BarItem?
- 15. プリズムwpfでユーザコントロールのデータコンテキストを設定する方法は?
- 16. Html.textareaでMaxlengthを課す方法は?
- 17. JavaFxでコンボボックスにリスト値を設定する方法
- 18. Wpfで既定のバインディングコンバータを設定する方法?
- 19. イメージサイズをピクセル単位でWPFで設定する方法は?
- 20. コンボボックスの最初のインデックスを空白に設定する方法
- 21. WPFでコンボボックスの項目を非表示にする方法
- 22. WPFでユーザーコントロールのようにコンボボックスを作成する方法
- 23. WPFでバインディングを設定する方法は?
- 24. WPFスライダープログラムで最小/最大を設定する方法は?
- 25. WinFormsコンボボックスのオートコンプリートドロップダウンフォーマットを設定する方法
- 26. DataAdapterでDataColumnのMaxLengthプロパティを動的に設定する
- 27. wpfのコードの後ろにウィンドウアイコンを設定する方法は?
- 28. wpfデザイナのカスタムコントロールの既定値を設定する方法?
- 29. Primefaces InputTextareaは条件付きでmaxlengthを設定します
- 30. カスタムアクションからWIXコンボボックスを設定する方法
MaxLengthとはどういう意味ですか? –