1
0

feat: add icon group box custom control

This commit is contained in:
2026-04-11 21:33:15 +08:00
parent 1f07be07ba
commit 428e80f9ac
2 changed files with 64 additions and 0 deletions

View File

@@ -0,0 +1,42 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace BallanceTasEditor.Frontend.Widgets {
public class IconGroupBox : GroupBox {
static IconGroupBox() {
DefaultStyleKeyProperty.OverrideMetadata(typeof(IconGroupBox), new FrameworkPropertyMetadata(typeof(IconGroupBox)));
}
public string GroupBoxText {
get { return (string)GetValue(GroupBoxTextProperty); }
set { SetValue(GroupBoxTextProperty, value); }
}
// Using a DependencyProperty as the backing store for GroupBoxText. This enables animation, styling, binding, etc...
public static readonly DependencyProperty GroupBoxTextProperty =
DependencyProperty.Register("GroupBoxText", typeof(string), typeof(IconGroupBox));
public ImageSource GroupBoxIcon {
get { return (ImageSource)GetValue(GroupBoxIconProperty); }
set { SetValue(GroupBoxIconProperty, value); }
}
// Using a DependencyProperty as the backing store for GroupBoxIcon. This enables animation, styling, binding, etc...
public static readonly DependencyProperty GroupBoxIconProperty =
DependencyProperty.Register("GroupBoxIcon", typeof(ImageSource), typeof(IconGroupBox));
}
}

View File

@@ -0,0 +1,22 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:widget="clr-namespace:BallanceTasEditor.Frontend.Widgets">
<Style x:Key="IconGroupBoxStyle" TargetType="{x:Type widget:IconGroupBox}" BasedOn="{StaticResource {x:Type GroupBox}}">
<Setter Property="HeaderTemplate">
<Setter.Value>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Source="{Binding GroupBoxIcon, RelativeSource={RelativeSource AncestorType=widget:IconGroupBox}, Mode=OneWay}"
RenderOptions.BitmapScalingMode="HighQuality"
Width="16" Height="16" VerticalAlignment="Center"/>
<TextBlock Text="{Binding GroupBoxText, RelativeSource={RelativeSource AncestorType=widget:IconGroupBox}, Mode=OneWay}"
Margin="5,0,0,0" VerticalAlignment="Center"/>
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="{x:Type widget:IconGroupBox}" BasedOn="{StaticResource IconGroupBoxStyle}"/>
</ResourceDictionary>