欧美vvv,亚洲第一成人在线,亚洲成人欧美日韩在线观看,日本猛少妇猛色XXXXX猛叫

新聞資訊

    WPF 實現 Badge 標識

    控件名:Badge

    作 者:WPFDevelopersOrg - 驚鏵

    原文鏈接[1]:https://github.com/WPFDevelopersOrg/WPFDevelopers

    • 框架使用.NET4 至 .NET6

    • Visual Studio 2022

    • 新建 Badge.cs 繼承裝飾器 Adorner 增加依賴屬性

      • Text 用來展示文本
      • FontSize 文本大小
      • IsShow 為布爾值用來是否顯示 Badge
      • IsShow=true 不設置其他屬性時候只顯示一個小紅點
      • 如果設置了 Text 則根據文本的寬度高度繪制小圓點的大小
    • 默認將其繪制到控件右上角。

    1)新建 Badge.cs 控件代碼如下:

    using System;
    using System.Windows;
    using System.Windows.Documents;
    using System.Windows.Media;

    namespace WPFDevelopers.Controls
    {
    public class Badge : Adorner
    {
    public static readonly DependencyProperty TextProperty=
    DependencyProperty.Register("Text", typeof(string), typeof(Badge), new PropertyMetadata(string.Empty));

    public static readonly DependencyProperty FontSizeProperty=
    DependencyProperty.Register("FontSize", typeof(double), typeof(Badge), new PropertyMetadata(10.0d));


    public static readonly DependencyProperty IsShowProperty=
    DependencyProperty.RegisterAttached("IsShow", typeof(bool), typeof(Badge),
    new PropertyMetadata(false, OnIsBadgeChanged));

    private static FrameworkElement oldFrameworkElement;
    private readonly double _size;

    private readonly string _text;

    public Badge(UIElement adornedElement, string text=, double size=0)
    : base(adornedElement)

    {
    _text=text;
    _size=size;
    ToolTip=text;
    }

    public string Text
    {
    get=> (string) GetValue(TextProperty);
    set=> SetValue(TextProperty, value);
    }

    public double FontSize
    {
    get=> (double) GetValue(FontSizeProperty);
    set=> SetValue(FontSizeProperty, value);
    }

    public static string GetText(UIElement element)
    {
    if (element==) throw new ArgumentException("Text");

    return (string) element.GetValue(TextProperty);
    }

    public static void SetText(UIElement element, string Text)
    {
    if (element==) throw new ArgumentException("Text");

    element.SetValue(TextProperty, Text);
    }

    public static double GetFontSize(UIElement element)
    {
    if (element==) throw new ArgumentException("FontSize");

    return (double) element.GetValue(FontSizeProperty);
    }

    public static void SetFontSize(UIElement element, string Text)
    {
    if (element==) throw new ArgumentException("FontSize");

    element.SetValue(FontSizeProperty, Text);
    }

    private static void OnIsBadgeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
    if (e.NewValue is bool isBadge && d is FrameworkElement parent)
    {
    if (isBadge)
    {
    if (!parent.IsLoaded)
    parent.Loaded +=Parent_Loaded;
    else
    CreateBadge(parent);
    }
    else
    {
    parent.Loaded -=Parent_Loaded;
    CreateBadge(parent, true);
    }
    }
    }

    private static void Parent_Loaded(object sender, RoutedEventArgs e)
    {
    if (sender is UIElement element)
    CreateBadge(element);
    }

    private static void CreateBadge(UIElement uIElement, bool isRemove=false)
    {
    var layer=AdornerLayer.GetAdornerLayer(uIElement);
    if (layer==) return;
    if (isRemove && uIElement !=)
    {
    var adorners=layer.GetAdorners(uIElement);
    if (adorners !=)
    foreach (var item in adorners)
    if (item is Badge container)
    layer.Remove(container);
    return;
    }

    var value=GetText(uIElement);
    var size=GetFontSize(uIElement);
    var badgeAdorner=new Badge(uIElement, value, size);
    layer.Add(badgeAdorner);
    }

    public static bool GetIsShow(DependencyObject obj)
    {
    return (bool) obj.GetValue(IsShowProperty);
    }

    public static void SetIsShow(DependencyObject obj, bool value)
    {
    obj.SetValue(IsShowProperty, value);
    }

    protected override void OnRender(DrawingContext drawingContext)
    {
    var adornedElement=AdornedElement as FrameworkElement;
    var margin=adornedElement.Margin;
    var desiredWidth=adornedElement.DesiredSize.Width - margin.Left - margin.Right;
    var brush=new SolidColorBrush((Color) Application.Current.TryFindResource("WD.DangerColor"));
    brush.Freeze();
    var radius=5.0;
    var center=new Point(desiredWidth, 0);
    FormattedText formattedText=;
    if (!string.IsOrEmpty(_text))
    formattedText=DrawingContextHelper.GetFormattedText(
    _text,
    Brushes.White,
    FlowDirection.LeftToRight,
    _size);
    var pen=new Pen(Brushes.White, .3);
    pen.Freeze();
    drawingContext.PushTransform(new MatrixTransform(Matrix.Identity));
    if (formattedText !=)
    {
    var height=formattedText.Height;
    var width=formattedText.Width > 20 ? 20 : formattedText.Width;
    var isSingle=false;
    if (_text.Length==1)
    {
    var max=formattedText.Width > formattedText.Height ? formattedText.Width : formattedText.Height;
    height=max;
    width=max;
    isSingle=true;
    }

    var startPoint=new Point(0, 0);
    var endPoint=new Point(0, 0);
    if (!isSingle)
    {
    startPoint=new Point(center.X - width / 1.4, center.Y - height / 1.8);
    endPoint=new Point(center.X + width / 1.4 + 6, center.Y + height / 1.8);
    }
    else
    {
    startPoint=new Point(center.X - width / 2, center.Y - height / 2);
    endPoint=new Point(center.X + width / 2, center.Y + height / 2);
    }

    var rect=new Rect(startPoint, endPoint);
    drawingContext.DrawRoundedRectangle(brush, pen, rect, 8, 8);
    formattedText.MaxTextWidth=width + 10;
    var centerRect=new Point(rect.Left + rect.Width / 2, rect.Top + rect.Height / 2);
    var textPosition=new Point(centerRect.X - formattedText.Width / 2,
    centerRect.Y - formattedText.Height / 2);
    drawingContext.DrawText(formattedText, textPosition);
    }
    else
    {
    drawingContext.DrawEllipse(brush, pen, center, radius, radius);
    }

    drawingContext.Pop();
    RenderOptions.SetEdgeMode(this, EdgeMode.Unspecified);
    }
    }
    }

    2)新建 BadgeExample.xaml 使用 Badge 控件代碼如下:

    <UserControl
    x:Class="WPFDevelopers.Samples.ExampleViews.BadgeExample"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:local="clr-namespace:WPFDevelopers.Samples.ExampleViews"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:wd="https://github.com/WPFDevelopersOrg/WPFDevelopers"
    d:DesignHeight="450"
    d:DesignWidth="800"
    mc:Ignorable="d">

    <Grid>
    <Grid.RowDefinitions>
    <RowDefinition Height="Auto" />
    <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <ToggleButton
    x:Name="MyBadgeToggleButton"
    Margin="10"
    HorizontalAlignment="Center"
    Content="顯示Badge" />

    <StackPanel
    Grid.Row="1"
    HorizontalAlignment="Center"
    Orientation="Horizontal">

    <Button
    wd:Badge.IsShow="{Binding ElementName=MyBadgeToggleButton, Path=IsChecked}"
    wd:Badge.Text="new"
    Content="Default"
    Style="{DynamicResource WD.PrimaryButton}" />

    <Button
    Margin="40,0"
    wd:Badge.FontSize="12"
    wd:Badge.IsShow="{Binding ElementName=MyBadgeToggleButton, Path=IsChecked}"
    wd:Badge.Text="3"
    Content="Success"
    Style="{DynamicResource WD.SuccessDefaultButton}" />

    <Button
    wd:Badge.FontSize="12"
    wd:Badge.IsShow="{Binding ElementName=MyBadgeToggleButton, Path=IsChecked}"
    wd:Badge.Text="10+"
    Content="Warning"
    Style="{DynamicResource WD.WarningDefaultButton}" />

    <Button
    Margin="40,0"
    wd:Badge.IsShow="{Binding ElementName=MyBadgeToggleButton, Path=IsChecked}"
    wd:Badge.Text="NEW"
    Content="Danger"
    Style="{DynamicResource WD.DangerDefaultButton}" />

    <Rectangle
    Width="100"
    Height="100"
    wd:Badge.IsShow="{Binding ElementName=MyBadgeToggleButton, Path=IsChecked}"
    Fill="Aqua" />

    </StackPanel>
    </Grid>
    </UserControl>

    參考資料

    [1]

    原文鏈接: https://github.com/WPFDevelopersOrg/WPFDevelopers

    IT之家 7 月 19 日消息,據微軟 Windows UI 官方宣布,Windows UI Library 2.8 正式發布。

    WinUI 2.8 是適用于 UWP 應用程序(以及使用 XAML Islands 的桌面應用程序)的 Windows UI 庫 (WinUI) 的最新穩定版本。

    有關使用最新版本的 WinUI 3 構建 Windows 桌面和 UWP 應用程序的詳細信息,請參閱 Windows UI 庫 3。

    WinUI 托管在 GitHub 上的 Windows UI 庫存儲庫中,微軟歡迎在其中報告錯誤報告、功能請求和社區代碼貢獻。

    WinUI 包可以通過 NuGet 包管理器添加到 Visual Studio 項目中。

    下面是更新內容:

    • WebView2 現在可在 WinUI 2 中使用。WebView2 使你能夠使用 Microsoft Edge (Chromium) 在本機應用程序中嵌入 Web 內容。

    • WinUI 2 最低支持版本現在是 Windows 10 版本 1809 - Build 17763。

    • 針對包括 TabView、NavigationView、InfoBadge 和 ProgressRing 在內的一系列控件的若干錯誤修復和改進。

    • 可訪問性和高對比度模式的改進。

    • AnimatedVisualPlayer.AnimationOptimization 屬性配置動畫在 AnimatedVisualPlayer 中的緩存方式。

    WinUI 3 Gallery 和 WinUI 2 Gallery 應用程序包括大多數 WinUI 3 和 WinUI 2 控件、特性和功能的交互式示例。用戶可以從 Microsoft Store 下載 WinUI 3 Gallery 和 WinUI 2 Gallery。

    用戶還可以從 GitHub 獲取兩者的源代碼(WinUI 3 使用 main 分支,WinUI 2 使用 winui2 分支)。

網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有