WPF Blend 自定義控制元件
#1.使用Blend 設計控制元件
<UserControl x:Class="WpfApp25.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:WpfApp25"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<UserControl.Resources>
<local:StatusColorConverter x:Key="statusColorConverter"></local:StatusColorConverter>
</UserControl.Resources>
<Grid>
<Ellipse HorizontalAlignment="Left" Height="100" Stroke="#FFF5F2F2" VerticalAlignment="Top" Width="100" StrokeThickness="5"
Fill="{Binding StatusP, Converter={StaticResource statusColorConverter},UpdateSourceTrigger=PropertyChanged, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:UserControl1}}}">
</Ellipse>
</Grid>
</UserControl>
#2.給控制元件新增自定義屬性
using System;
using System.Collections.Generic;
using System.Globalization;
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 WpfApp25
{
public enum Status { Normal, Good, Bad }
public class StatusColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is Status && value != null)
{
Status status = (Status)value;
var color = Colors.Gray;
switch (status)
{
case Status.Good:
color = Colors.Green; break;
case Status.Bad:
color = Colors.Red; break;
}
return new LinearGradientBrush(color,Colors.White,100.0);
}
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
public partial class UserControl1 : UserControl
{
public Status StatusP
{
get { return (Status)GetValue(StatusPProperty); }
set { SetValue(StatusPProperty, value); }
}
public static readonly DependencyProperty StatusPProperty =
DependencyProperty.Register("StatusP", typeof(Status), typeof(UserControl1), new PropertyMetadata(Status.Normal));
public UserControl1()
{
InitializeComponent();
StatusP = Status.Bad;
}
}
}
#3.MainWindow新增呼叫
<Window x:Class="WpfApp25.MainWindow"
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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp25"
mc:Ignorable="d"
Title="MainWindow" Height="522" Width="814">
<Grid x:Name="xgrid" Background="#FFDCD3D3">
<local:UserControl1 x:Name="xbtn" Margin="110,190,577,129" ></local:UserControl1>
<Button Click="Button_Click" Content="Normal" HorizontalAlignment="Left" Height="73.443" Margin="341.846,150.596,0,0" VerticalAlignment="Top" Width="233.679"/>
<Button Click="Button_Click1" Content="Green" HorizontalAlignment="Left" Height="73" Margin="342,365,0,0" VerticalAlignment="Top" Width="234"/>
<Button Click="Button_Click2" Content="Red" HorizontalAlignment="Left" Height="73" Margin="342,255,0,0" VerticalAlignment="Top" Width="234"/>
</Grid>
</Window>
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 WpfApp25
{
/// <summary>
/// MainWindow.xaml 的互動邏輯
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
xbtn.StatusP = Status.Normal;
}
private void Button_Click1(object sender, RoutedEventArgs e)
{
xbtn.StatusP = Status.Good;
}
private void Button_Click2(object sender, RoutedEventArgs e)
{
xbtn.StatusP = Status.Bad;
}
}
}
相關文章
- WPF自定義FixedColumnGrid佈局控制元件控制元件
- wpf自定義控制元件新增引用資源控制元件
- WPF 仿語音播放 自定義控制元件控制元件
- WPF滑塊控制元件(Slider)的自定義樣式控制元件IDE
- WPF自定義介面WindowChromeChrome
- WPF 自定義附加事件事件
- WPF自定義路由事件路由事件
- Simple WPF: WPF 自定義按鈕外形
- 功能齊全的 WPF 自定義控制元件資源庫(收藏版)控制元件
- 自定義控制元件ViewPager控制元件Viewpager
- 自定義Switch控制元件控制元件
- 【自定義使用者控制元件】 wpf 可繫結的RichTextBox 編輯器。控制元件
- 4. 自定義控制元件(4) --- 自定義屬性控制元件
- Simple WPF: WPF自定義一個可以定義步長的SpinBox
- iOS自定義控制元件 SlideriOS控制元件IDE
- iOS自定義控制元件 AlertViewiOS控制元件View
- iOS自定義控制元件 SegmentiOS控制元件
- winform 自定義容器控制元件ORM控制元件
- Flutter 之 自定義控制元件Flutter控制元件
- 自定義控制元件 --- 電池icon控制元件
- Flutter 自定義縮放控制元件Flutter控制元件
- Qt實現自定義控制元件QT控制元件
- AngularJS自定義表單控制元件AngularJS控制元件
- 【Android】自定義樹形控制元件Android控制元件
- iOS自定義控制元件:簡易下拉控制元件iOS控制元件
- QT常用控制元件(三)——自定義控制元件封裝QT控制元件封裝
- 自定義控制元件總結和思考控制元件
- 【自定義使用者控制元件】CNMButton控制元件
- UWP 自定義密碼框控制元件密碼控制元件
- iOS 自定義拖拽式控制元件:QiDragViewiOS控制元件View
- C#自定義控制元件—指示燈C#控制元件
- 工作記錄--WPF自定義控制元件,實現一個可設定編輯模式的TextBox控制元件模式
- Android 控制元件架構與自定義控制元件詳解Android控制元件架構
- iOS自定義控制元件:自定義TableView、CollectionView空資料佔點陣圖iOS控制元件View
- 簡單的自定義表單控制元件控制元件
- Qt自定義開關按鈕控制元件QT控制元件
- iOS 自定義卡片式控制元件:QiCardViewiOS控制元件View
- C#自定義控制元件—儀表盤C#控制元件