Avalonia 修改CheckBox 合取方塊大小 和 停用 滑鼠移動到 CheckBox 上方時文字顏色變化

Avalonia 修改CheckBox 合取方塊大小 和 停用 滑鼠移動到 CheckBox 上方時文字顏色變化

Avalonia 修改CheckBox 合取方塊大小 和 停用 滑鼠移動到 CheckBox 上方時文字顏色變化


資料來源: copilot+kimi


DeviceEdit.axaml

<Window xmlns="https://github.com/avaloniaui"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
		xmlns:local="clr-namespace:VPOS_Avalonia"
		xmlns:vm="using:VPOS_Avalonia.ViewModels"
		x:DataType="vm:DeviceEditViewModel"
        x:Class="VPOS_Avalonia.DeviceEdit"
        Title="VPOS" Loaded="Window_Loaded">

	<!--
		ViewModels 使用步驟:
			▲[固定語法(寫在axaml)] xmlns:vm="using:VPOS_Avalonia.ViewModels"
			▲[對應語法(寫在axaml)] x:DataType="vm:DeviceEditViewModel"
			▲[對應語法(寫在axaml)] <Design.DataContext>
			▲[對應語法(寫在cs)] DataContext = new DeviceEditViewModel();//建構子函數中資源檔載入[InitializeComponent();]前必須指定ViewModel
	-->
	<Design.DataContext>
		<vm:DeviceEditViewModel/>
	</Design.DataContext>

	<Window.Styles>
		<!--修改CheckBox 合取方塊大小-->
		<Style Selector="CheckBox">
			<Setter Property="FontSize" Value="20" />
			<Setter Property="Foreground" Value="White" />
			<Setter Property="Template">
				<Setter.Value>
					<ControlTemplate>
						<StackPanel Orientation="Horizontal">
							<Border Name="PART_CheckmarkBorder"
                                    Width="25"
                                    Height="25"
                                    Background="White"
                                    Margin="2">
								<Path Name="PART_Checkmark"
                                      Stretch="Uniform"
                                      StrokeThickness="2"
                                      Stroke="Blue"
                                      Data="M0,4 L4,8 8,0"
                                      Opacity="{TemplateBinding IsChecked, Converter={StaticResource BooleanToOpacityConverter}}" />
							</Border>
							<ContentPresenter Name="PART_ContentPresenter"
                                              Margin="4,0,0,0"
                                              VerticalAlignment="Center"
                                              Content="{TemplateBinding Content}"
											  Foreground="{TemplateBinding Foreground}"
                                              ContentTemplate="{TemplateBinding ContentTemplate}"/>
						</StackPanel>
					</ControlTemplate>
				</Setter.Value>
			</Setter>
		</Style>
		
		<!--
		https://kimi.moonshot.cn/
		如果上述代码仍然不起作用,可能是因为CheckBox的模板中有一些更具体的样式选择器在起作用。你可以尝试直接针对模板中的ContentPresenter设置样式
		-->
		<Style Selector="CheckBox:pointerover /template/ ContentPresenter">
			<Setter Property="Foreground" Value="White"/>
		</Style>
	</Window.Styles>

	<Border BorderBrush="LightBlue" BorderThickness="5" CornerRadius="10" Margin="-3">
		<Grid x:Name="FullGrid" RowDefinitions="0.6*,10.4*,1*" ColumnDefinitions="*" >
			<Border BorderBrush="Blue" BorderThickness="1" CornerRadius="10" Margin="0" Grid.Row="0" Grid.Column="0">
				<Grid x:Name="HeadGrid" RowDefinitions="*" ColumnDefinitions="*">
					<TextBlock x:Name="TitleLable" Text="周邊設備編輯" Foreground="White" FontSize="22" Grid.Row="0" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Center" />
					<Button x:Name="CloseBtn" Content="X" Grid.Row="0" Grid.Column="0" FontSize="24" Background="Transparent" Foreground="White" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="0,0,20,0" Click="CloseBtn_Clicked"/>
				</Grid>
				<!--HeadGrid End-->
			</Border>

			<Border BorderBrush="White" BorderThickness="1" CornerRadius="10" Margin="20,20,20,10" Grid.Row="1" Grid.Column="0">
				<Grid x:Name="BodyGrid" RowDefinitions="*,*,*,*,*,2*,0.5*" ColumnDefinitions="0.8*,1.6*,0.8*,0.8*" Margin="20,10,20,10">
					<TextBlock x:Name="Lab00" Text="設備型號:" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="White" FontSize="20" Grid.Row="0" Grid.Column="0"/>
					<ComboBox x:Name="Picker01" ItemsSource="{Binding Picker01List}" DisplayMemberBinding="{Binding Picker_Name}" VerticalAlignment="Center" HorizontalAlignment="Stretch" Background="White" FontSize="20" Grid.Row="0" Grid.Column="1" SelectionChanged="Picker01_SelectedIndexChanged"/>
					<TextBlock Text="啟用設備:" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="White" FontSize="20" Grid.Row="0" Grid.Column="2"/>
					<Image x:Name="Img03" Source="avares://VPOS_Avalonia/Assets/switch_off.png" HorizontalAlignment="Left" Grid.Row="0" Grid.Column="3" PointerPressed="img03_Clicked"/>

					<TextBlock Text="紙張格式:" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="White" FontSize="20" Grid.Row="1" Grid.Column="0"/>
					<TextBox x:Name="Txt11" Text="" VerticalAlignment="Center" IsReadOnly="True" Background="White" FontSize="20" Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="3"  Margin="0,8"/>
					<!-- <ComboBox x:Name="Picker11" ItemsSource="{Binding Picker11List}" DisplayMemberBinding="{Binding Picker_Name}" VerticalAlignment="Center" HorizontalAlignment="Stretch" Background="White" FontSize="20" Grid.Row="1" Grid.Column="1" /> -->

					<TextBlock x:Name="Lab20" Text="連接方式:" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="White" FontSize="20" Grid.Row="2" Grid.Column="0"/>
					<ComboBox x:Name="Picker21" ItemsSource="{Binding Picker21List}" DisplayMemberBinding="{Binding Picker_Name}" VerticalAlignment="Center" HorizontalAlignment="Stretch" Background="White" FontSize="20" Grid.Row="2" Grid.Column="1" SelectionChanged="Picker21_SelectedIndexChanged"/>
					<TextBlock x:Name="Lab22" Text="列印份數:" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="White" FontSize="20" Grid.Row="2" Grid.Column="2"/>
					<TextBox x:Name="Txt23" Text="" VerticalAlignment="Center" Background="White" FontSize="20" Grid.Row="2" Grid.Column="3" Margin="0,8"/>

					<TextBlock x:Name="Lab30" Text="IP:" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="White" FontSize="20" Grid.Row="3" Grid.Column="0"/>
					<TextBox x:Name="Txt31" IsVisible="True" Text="" VerticalAlignment="Center" Background="White" FontSize="20" Grid.Row="3" Grid.Column="1" Margin="0,8"/>
					<ComboBox x:Name="Picker31_0" IsVisible="False" ItemsSource="{Binding Picker31_0List}" DisplayMemberBinding="{Binding Picker_Name}" VerticalAlignment="Center" HorizontalAlignment="Stretch" Background="White" FontSize="20" Grid.Row="3" Grid.Column="1" Grid.ColumnSpan="3"/>
					<ComboBox x:Name="Picker31_1" IsVisible="False" ItemsSource="{Binding Picker31_1List}" DisplayMemberBinding="{Binding Picker_Name}" VerticalAlignment="Center" HorizontalAlignment="Stretch" Background="White" FontSize="20" Grid.Row="3" Grid.Column="1" />
					<TextBlock x:Name="Lab32" IsVisible="True" Text="Port:" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="White" FontSize="20" Grid.Row="3" Grid.Column="2"/>
					<TextBox x:Name="Txt33" IsVisible="True" Text="" VerticalAlignment="Center" Background="White" FontSize="20" Grid.Row="3" Grid.Column="3" Margin="0,8"/>
					<ComboBox x:Name="Picker33" IsVisible="False" ItemsSource="{Binding Picker33List}" DisplayMemberBinding="{Binding Picker_Name}" VerticalAlignment="Center" HorizontalAlignment="Stretch" Background="White" FontSize="20" Grid.Row="3" Grid.Column="3" />

					<TextBlock x:Name="Lab40"  Text="底部列印資訊:" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="White" FontSize="20" Grid.Row="4" Grid.Column="0"/>
					<TextBox x:Name="Txt41" Text="" VerticalAlignment="Center" Background="White" FontSize="20" Grid.Row="4" Grid.Column="1" Grid.ColumnSpan="3"  Margin="0,8"/>

					<Grid x:Name="BodyGrid50" RowDefinitions="*,*,*,*" ColumnDefinitions="*,*,*" Grid.Row="5" Grid.Column="0" Grid.RowSpan="2" Grid.ColumnSpan="4" >
						<CheckBox x:Name="Cbx00" Content="核取方塊長度測試" Foreground="White" FontSize="20" Grid.Row="0" Grid.Column="0"/>		
						<CheckBox x:Name="Cbx01" Content="核取方塊長度測試" Foreground="White" FontSize="20" Grid.Row="0" Grid.Column="1"/>
						<CheckBox x:Name="Cbx02" Content="核取方塊長度測試" Foreground="White" FontSize="20" Grid.Row="0" Grid.Column="2"/>
						<CheckBox x:Name="Cbx10" Content="核取方塊長度測試" Foreground="White" FontSize="20" Grid.Row="1" Grid.Column="0"/>
						<CheckBox x:Name="Cbx11" Content="核取方塊長度測試" Foreground="White" FontSize="20" Grid.Row="1" Grid.Column="1"/>
						<CheckBox x:Name="Cbx12" Content="核取方塊長度測試" Foreground="White" FontSize="20" Grid.Row="1" Grid.Column="2"/>
						<CheckBox x:Name="Cbx20" Content="核取方塊長度測試" Foreground="White" FontSize="20" Grid.Row="2" Grid.Column="0"/>
						<CheckBox x:Name="Cbx21" Content="核取方塊長度測試" Foreground="White" FontSize="20" Grid.Row="2" Grid.Column="1"/>
						<CheckBox x:Name="Cbx22" Content="核取方塊長度測試" Foreground="White" FontSize="20" Grid.Row="2" Grid.Column="2"/>
						<CheckBox x:Name="Cbx30" Content="核取方塊長度測試" Foreground="White" FontSize="20" Grid.Row="3" Grid.Column="0"/>
						<CheckBox x:Name="Cbx31" Content="核取方塊長度測試" Foreground="White" FontSize="20" Grid.Row="3" Grid.Column="1"/>
						<CheckBox x:Name="Cbx32" Content="核取方塊長度測試" Foreground="White" FontSize="20" Grid.Row="3" Grid.Column="2"/>
					</Grid>

				</Grid>
			</Border>
			<TextBlock Text="設備資訊" FontSize="20" Foreground="White" Background="#194a6e" VerticalAlignment="Top" HorizontalAlignment="Left" Padding="0" Margin="35,5,0,0" Grid.Row="1" Grid.Column="0"/>


			<Grid x:Name="FooterGrid" Grid.Row="2" Grid.Column="0" RowDefinitions="*" ColumnDefinitions="3.5*,1*,0.5*,0.5*,1*,3.5*" >
				<local:ExtButton x:Name="FooterBtn00" FontSize="22" Background="Orange" Foreground="White" Content="儲        存" Click="FooterBtn00_Clicked" Margin="0,5" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Grid.Row="0" Grid.Column="1"/>
				<local:ExtButton x:Name="FooterBtn01" FontSize="22" Background="Orange" Foreground="White" Content="離        開" Click="CloseBtn_Clicked" Margin="0,5" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Grid.Row="0" Grid.Column="4" />
				<Image x:Name="KeyboardBtn" Margin="10,5" Source="avares://VPOS_Avalonia/Assets/keyboard.png" Grid.Row="0" Grid.Column="5" Width="60" VerticalAlignment="Center" HorizontalAlignment="Center" PointerPressed="KeyboardBtn_Clicked"/>
			</Grid>
		</Grid>
		<!--FullGrid End-->
	</Border>
</Window>


App.axaml

<Application xmlns="https://github.com/avaloniaui"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             x:Class="VPOS_Avalonia.App"
			 xmlns:local="clr-namespace:VPOS_Avalonia"
             RequestedThemeVariant="Default">
             <!-- "Default" ThemeVariant follows system theme variant. "Dark" or "Light" are other available options. -->
	
	<Application.Resources>
		<local:BooleanToOpacityConverter x:Key="BooleanToOpacityConverter" />
	</Application.Resources><!--修改CheckBox 合取方塊大小-->  
    
	<Application.Styles>
		<FluentTheme />
		<!-- https://github.com/AvaloniaUI/Avalonia/discussions/8424 -->
		<StyleInclude Source="avares://Avalonia.Controls.DataGrid/Themes/Fluent.xaml"/>	
    </Application.Styles>
</Application>


BooleanToOpacityConverter.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace VPOS_Avalonia;

using Avalonia.Data.Converters;
using System;
using System.Globalization;

//<!--修改CheckBox 合取方塊大小-->  
public class BooleanToOpacityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value is bool boolean)
        {
            return boolean ? 1.0 : 0.0;
        }
        return 0.0;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

One thought on “Avalonia 修改CheckBox 合取方塊大小 和 停用 滑鼠移動到 CheckBox 上方時文字顏色變化

  1. 原始問題01. Avalonia 修改CheckBox 合取方塊大小

    原始問題02.我在 Avaloniag 使用 CheckBox 我現在只想要當滑鼠移動到 CheckBox 上時文字顏色不會改變 我要如何實作

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *