HandyControl 应用


xmlns:hc="https://handyorg.github.io/handycontrol"
using HandyControl;

多选组合框 CheckComboBox

<hc:CheckComboBox x:Name="CheckComboBoxInfo" Margin="5" ShowClearButton="True" ShowSelectAllButton="True" IsEnabled="True"
      Width="300" Style="{StaticResource CheckComboBoxPlus}"
          ItemsSource="{Binding LabelGroupSource}" 
          SelectedValuePath="Key" DisplayMemberPath="Value">
    <hc:CheckComboBox.ItemContainerStyle>
        <Style TargetType="{x:Type hc:CheckComboBoxItem}" BasedOn="{StaticResource CheckComboBoxItemBaseStyle}">
            <Setter Property="IsSelected" Value="{Binding IsChecked}"/>
        </Style>
    </hc:CheckComboBox.ItemContainerStyle>
</hc:CheckComboBox>

<Button Content="Save" Command="{Binding SaveCommand}" 
	CommandParameter="{Binding ElementName=CheckComboBoxInfo, Path=SelectedItems}"/>
// ViewModel
public ObservableCollection<CheckedSource> LabelGroupSource { get; set; }
// 数值初始化
LabelGroupSource[0].IsChecked = true;
LabelGroupSource[1].IsChecked = true;
LabelGroupRefreshEvent?.Invoke(this, EventArgs.Empty);

/// <summary>
/// 更新标签显示
/// </summary>
public event EventHandler LabelGroupRefreshEvent;
public DelegateCommand<object> SaveCommand => new DelegateCommand<object>(ExecuteSaveCommand);
void ExecuteGroupImportCommand(object obj)
{
    _dependency.ShowInfo("Save");
}

// .cs 更新View
private void Vm_LabelGroupRefreshEvent(object sender, System.EventArgs e)
{
   CheckComboBoxInfo.OnApplyTemplate();
}

扩展 SelectedItems

默认的SelectedItems是非依赖属性,不能进行绑定,可以通过附加属性进行扩展支持。

<ctl:CheckComboBoxEx Width="500" Height="40" 
     Style="{StaticResource CheckComboBoxPlus}"
     ItemsSource="{Binding SourceList}" comm:CheckComboBoxHelper.SelectedItems="{Binding SelectedItems}"/>

// ViewModel
SourceList = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
SelectedItems = new List<int> { 6, 8, 9, 0 };

注意,SelectedItems的数据应该是SourceList 的一部分。

using HandyControl.Controls;
using System.Collections;
using System.Windows;
using System.Windows.Controls;
public class CheckComboBoxHelper
{
    public static IList GetSelectedItems(DependencyObject obj)
    {
        return (IList)obj.GetValue(SelectedItemsProperty);
    }
    public static void SetSelectedItems(DependencyObject obj, int value)
    {
        obj.SetValue(SelectedItemsProperty, value);
    }
    public static readonly DependencyProperty SelectedItemsProperty =
        DependencyProperty.RegisterAttached("SelectedItems", typeof(IEnumerable), typeof(CheckComboBoxHelper), new PropertyMetadata(null, OnSelectedItemsChanged));

    private static void OnSelectedItemsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        if (d is CheckComboBox cbox)
        {
            if (e.OldValue != null)
            {
                cbox.SelectionChanged -= OnSelectionChanged;
            }
            if (e.NewValue is IList list)
            {
                cbox.SelectedItems.Clear();
                if (list != null)
                {
                    foreach (var item in list)
                    {
                        cbox.SelectedItems.Add(item);
                    }
                    cbox.OnApplyTemplate();
                    cbox.SelectionChanged += OnSelectionChanged;
                }
            }
        }
    }

    private static void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        var dataSource = GetSelectedItems(sender as DependencyObject);
        // 添加用户选中的项
        foreach (var item in e.AddedItems)
        {
            dataSource.Add(item);
        }
        // 删除用户取消选中的项
        foreach (var item in e.RemovedItems)
        {
            dataSource.Remove(item);
        }
    }
}

TabControl

Header大小

<Style x:Key="TabItemSizeStyleEx" TargetType="TabItem" BasedOn="{StaticResource TabItemInLine}">
    <Setter Property="HeaderTemplate">
        <Setter.Value>
            <DataTemplate>
                <TextBlock Text="{Binding Path=Header, RelativeSource={RelativeSource AncestorType=TabItem}}" FontSize="20"/>
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>

标记 Badge

<DataGridTemplateColumn Header="标记">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <hc:Badge Status="Dot" Margin="0,0,0,0" BadgeMargin="0,0,5,0" VerticalAlignment="Center" 
                          Background="Red"/>
                <TextBlock Text="{Binding XXX}"/>
            </StackPanel>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM