私のGoogleスキルが失敗します。誰でもWPFのようなコントロールを聞いた。私はそれをこのように見せようとしています(winformsのスクリーンショット)。チェックボックス付きのWPFコンボボックスを探している
alt text http://www.angryhacker.com/toys/up.png
私のGoogleスキルが失敗します。誰でもWPFのようなコントロールを聞いた。私はそれをこのように見せようとしています(winformsのスクリーンショット)。チェックボックス付きのWPFコンボボックスを探している
alt text http://www.angryhacker.com/toys/up.png
あなたは、コンボボックスのDataTemplateのを設定することにより、これを自分で行うことができます。 This articleはリストボックスの使い方を示していますが、原則は同じです。
別の記事hereは、おそらくあなたがやろうとしているもののためのより良いフィット感、シンプルなセット項目テンプレートの最初の列のチェックボックスも、ビジネスオブジェクトのブール値にバインドすることです。
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding IsSelected}"
Width="20" />
<TextBlock Text="{Binding DayOfWeek}"
Width="100" />
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
ビジネスオブジェクトにIsSelectedを追加する必要はありませんか? –
コンボボックスから継承する新しいカスタムコントロールを作成し、コントロールのテンプレートを変更して、ポップアップにあるコントロールをチェックボックスを含むリストに置き換えることができます。コントロールのCheckedイベントを確認し、プロパティで公開可能なチェック済みアイテムのリストを維持します。 –
私のコンボボックスがあります。私はCan a WPF ComboBox display alternative text when its selection is null?
<ComboBox Name="cbObjects" Grid.Column="1" Grid.Row="1" VerticalAlignment="Center" Margin="2,2,6,0" SelectionChanged="OnCbObjectsSelectionChanged" >
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding IsSelected}" Width="20" VerticalAlignment="Center" Checked="OnCbObjectCheckBoxChecked" Unchecked="OnCbObjectCheckBoxChecked" />
<TextBlock Text="{Binding ObjectData}" VerticalAlignment="Center" />
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock IsHitTestVisible="False" Name="tbObjects" Text="Выберите объекты..." Grid.Column="1" Grid.Row="1" VerticalAlignment="Center" Margin="6,2,6,0" />
このリンクから、マーティン・ハリスコードとコードを使用するデータソースの小クラス:
public class SelectableObject <T> {
public bool IsSelected { get; set; }
public T ObjectData { get; set; }
public SelectableObject(T objectData) {
ObjectData = objectData;
}
public SelectableObject(T objectData, bool isSelected) {
IsSelected = isSelected;
ObjectData = objectData;
}
}
そして2件のハンドラがある - クリックチェックボックスとコンボボックスのテキストを形成するための1つを処理するための一つ。
私はtblObjectは私のオブジェクトの種類、私はコンボボックスに表示するかのリストであるObservableCollection<SelectableObject<tblObject>>
を使用ComboBox.ItemsSourceするため
private void OnCbObjectCheckBoxChecked(object sender, RoutedEventArgs e) {
StringBuilder sb = new StringBuilder();
foreach (SelectableObject<tblObject> cbObject in cbObjects.Items)
if (cbObject.IsSelected)
sb.AppendFormat("{0}, ", cbObject.ObjectData.Description);
tbObjects.Text = sb.ToString().Trim().TrimEnd(',');
}
private void OnCbObjectsSelectionChanged(object sender, SelectionChangedEventArgs e) {
ComboBox comboBox = (ComboBox)sender;
comboBox.SelectedItem = null;
}
。
このコードが誰かにとって便利だと思います!
私はSelectableObjectのアイデアが好きでした。 +1! –
テンプレート内のimho StackPanelとTextBlockは冗長なので、チェックボックスのContentプロパティをObjectDataにバインドできます。 – Taras
CheckComboBoxを試してください。Extended WPF Toolkitから
私はこのアプローチは、より実用的な検索:私にとって 主な利点は、結合のための二つのリストを持っています。さらに、バインドしているコレクションのメンバーをvalue
とdisplay
と指定することができます。
CheckComboBox
で他のコントロールを使用したくない場合は、source codeを得ることができます。これはかなり簡単です(Selector classも必要です)。
[これは素晴らしいカスタムコントロールの実装です](http://blogs.microsoft.co.il/blogs/justguy/archive/2009/01/19/wpf-combobox-with-checkboxes-as-items-itあなたが再作成する必要がある場合はどうすればいいでしょうか?[alt text](http://blogs.microsoft.co.il/blogs/justguy/image_thumb_44E16700.png) –