为c#windows应用程序提供自定义样式

本文关键字:自定义 样式 c#windows 应用程序 | 更新日期: 2023-09-27 17:58:49

我想知道是否有一种方法可以使用c#自定义visualstudio中构建的windows窗体应用程序的样式。我在互联网上搜索过,找不到覆盖布局默认视图的简单解决方案。有没有一种方法可以通过级联样式表更改布局?提前谢谢。

为c#windows应用程序提供自定义样式

Windows窗体应用程序不支持CSS,它在开发网站时使用。

在Winforms中,除非您想覆盖OnPaint事件并进行自定义绘制,否则您只能使用GUI编辑器中属性窗口中列出的样式。

例如:

http://www.codeproject.com/Articles/8056/Creating-Custom-Shaped-Windows-Forms-in-NET

http://geekswithblogs.net/kobush/archive/2005/07/04/CustomBorderForms.aspx

https://customerborderform.codeplex.com/

如果你正在寻找更可定制的解决方案,你可以求助于WPF。

您可以在这里找到答案。。

static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        // Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }
}

您可以使用这样的静态资源。

内部按钮标记Style="{DynamicResource sty3dBtn}"(你也可以在这里设置边距,但有时最好根据你自己的需要为每个按钮设置)

您可以使用xml样式。按钮被设置为有阴影和渐变,按下时会亮起。由于我想用类似的按钮重复使用这些效果,我在Application.xaml中创建了一个可重复使用的样式,该样式包含在Application-Application.Resources标记中并引用了我想要效果的按钮的x:Key in样式属性。你可以在你选择的每一页上都这样做,但我认为最好放在一个公共区域,这样它就可以在你放置的类的整个范围内重复使用。注意,目标类型必须匹配。

我将发布xml样式的片段,它将一个常规按钮变成一个具有3d效果的按钮。您可以根据需要多次引用此内容。在我看来,它也减少了内联代码的混乱,从而使页面更具可读性。

    <Style x:Key="sty3dBtn" TargetType="Button">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Grid>
                        <Rectangle x:Name="GelBackground" Opacity="1" RadiusX="9" RadiusY="9"
                               Fill="{TemplateBinding Background}" StrokeThickness="0.35"
                                   RenderTransformOrigin="0.5,0.5">
                            <Rectangle.Stroke>
                                <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                                    <GradientStop Color="YellowGreen" Offset="0" />
                                    <GradientStop Color="Green" Offset="1" />
                                </LinearGradientBrush>
                            </Rectangle.Stroke>
                        </Rectangle>
                        <Rectangle x:Name="GelShine" Margin="2,2,2,0" VerticalAlignment="Top"
                                   RadiusX="6" RadiusY="6" Opacity="1" Stroke="Transparent" Height="15px">
                            <Rectangle.Fill>
                                <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                                    <GradientStop Color="Yellow" Offset="0"/>
                                    <GradientStop Color="Transparent" Offset="1"/>
                                </LinearGradientBrush>
                            </Rectangle.Fill>
                        </Rectangle>
                        <ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center"/>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="Background" Value="Brown">
                            </Setter>
                        </Trigger>
                        <Trigger Property="IsPressed" Value="True">
                            <Setter Property="Fill" TargetName="GelBackground">
                                <Setter.Value>
                                    <LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
                                        <GradientStop Color="Yellow" Offset="0"/>
                                        <GradientStop Color="Green" Offset="1"/>
                                    </LinearGradientBrush>
                                </Setter.Value>
                            </Setter>
                            <Setter Property="RenderTransform" TargetName="GelBackground">
                                <Setter.Value>
                                    <TransformGroup>
                                        <ScaleTransform ScaleX="0.9" ScaleY="0.9"/>
                                    </TransformGroup>
                                </Setter.Value>
                            </Setter>
                        </Trigger>
                        <Trigger Property="IsEnabled" Value="False">
                            <Setter Property="Fill" TargetName="GelBackground" Value="LightGray">
                            </Setter>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <!-- Contains animation code-->
        <Setter Property="Background" Value="Green"/>
        <Setter Property="Foreground" Value="White"/>
        <Setter Property="Width" Value="55"/>
        <Setter Property="Height" Value="30"/>
    </Style>

尽管WinForms平台本身不支持CSS样式,但您可以使用DevExpress组件及其HTML&CSS功能用于灵活的UI自定义