wpf 中的 自定义控件的 binding

XMl 代码
-------------------------------------------------------------------------------------------------------------------------------
<UserControl
x:Class="Xiaowei.Controls.PermissionBlock"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Xiaowei.Controls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:tk="using:Microsoft.Toolkit.Uwp.UI.Controls"
mc:Ignorable="d"
d:DesignHeight="200"
d:DesignWidth="480"
Height="76"
x:Name="permissionBlock">
<UserControl.Resources>
<Storyboard x:Name="GIFStoryBoard">
<DoubleAnimation
x:Name="GIFDoubleAnimation"
EnableDependentAnimation="True"
To="176" Duration="00:00:0.3"
Storyboard.TargetName="borderGrid"
Storyboard.TargetProperty="Height">
<DoubleAnimation.EasingFunction>
<PowerEase EasingMode="EaseInOut"/>
</DoubleAnimation.EasingFunction>
</DoubleAnimation>
<DoubleAnimation
x:Name="GIFBorderDoubleAnimation"
EnableDependentAnimation="True"
To="1" Duration="00:00:0.3"
Storyboard.TargetName="shadowBorder"
Storyboard.TargetProperty="Opacity">
<DoubleAnimation.EasingFunction>
<PowerEase EasingMode="EaseInOut"/>
</DoubleAnimation.EasingFunction>
</DoubleAnimation>
</Storyboard>
</UserControl.Resources>
<Grid x:Name="borderGrid" Height="76" VerticalAlignment="Top" Margin="0,0,0,-200">
<tk:DropShadowPanel Opacity="0"
x:Name="shadowBorder"
VerticalContentAlignment="Stretch"
Margin="14,0,14,8"
HorizontalContentAlignment="Stretch">
<Grid Background="White"
CornerRadius="7" >
</Grid>
</tk:DropShadowPanel>
<Grid Background="White" CornerRadius="7" Margin="14,0,14,8" VerticalAlignment="Stretch" PointerEntered="PointerEntered" PointerExited="PointerExited">
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<Image
Width="28"
Height="28"
Margin="12,20,0,20"
HorizontalAlignment="Left"
VerticalAlignment="Center"
Source="{Binding Icon, ElementName=permissionBlock, Mode=OneWay}"
/>
<TextBlock
HorizontalAlignment="Left"
VerticalAlignment="Top"
FontSize="16"
Foreground="#272727"
Margin="48,12,0,0"
Text="{Binding Title, ElementName=permissionBlock, Mode=OneWay}">
</TextBlock>
<TextBlock
Foreground="#666666"
HorizontalAlignment="Left"
VerticalAlignment="Bottom"
FontSize="14"
FontWeight="Light"
Text="{Binding Comment, ElementName=permissionBlock, Mode=OneWay}"
Margin="48,0,0,11">
</TextBlock>
<Button
Style="{ThemeResource ButtonStyleTransBack}"
Content="开启"
Click="ActiveButton_Click"
HorizontalAlignment="Right"
Margin="0,0,25,0"
Foreground="#4367FC"
FontSize="16"/>
<Image
Grid.Row="1" Height="119" Margin="12,0,12,12"
Source="{Binding GIFSource, ElementName=permissionBlock, Mode=OneWay}"
/>
</Grid>
</Grid>
</UserControl>
C# code
-----------------------------------------------------------------------------------------------------------------------------------
using System;
using Windows.UI;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Media;
// The User Control item template is documented at https://go.microsoft.com/fwlink/?LinkId=234236
namespace Xiaowei.Controls
{
public sealed partial class PermissionBlock : UserControl
{
public static DependencyProperty TitleProperty { get; } = DependencyProperty.Register(
"Title", typeof(string), typeof(PermissionBlock), new PropertyMetadata("")
);
public string Title
{
get
{
return (string)GetValue(TitleProperty);
}
set
{
SetValue(TitleProperty, value);
}
}
public static DependencyProperty CommentProperty { get; } = DependencyProperty.Register(
"Comment", typeof(string), typeof(PermissionBlock), new PropertyMetadata("")
);
public string Comment
{
get
{
return (string)GetValue(CommentProperty);
}
set
{
SetValue(CommentProperty, value);
}
}
public static DependencyProperty IconProperty { get; } = DependencyProperty.Register(
"Icon", typeof(ImageSource), typeof(PermissionBlock), new PropertyMetadata(null)
);
public ImageSource Icon
{
get
{
return (ImageSource)GetValue(IconProperty);
}
set
{
SetValue(IconProperty, value);
}
}
public static DependencyProperty GIFSourceProperty { get; } = DependencyProperty.Register(
"GIFSource", typeof(ImageSource), typeof(PermissionBlock), new PropertyMetadata(null)
);
public ImageSource GIFSource
{
get
{
return (ImageSource)GetValue(GIFSourceProperty);
}
set
{
SetValue(GIFSourceProperty, value);
}
}
private void ShowGif()
{
GIFDoubleAnimation.To = 210;
GIFBorderDoubleAnimation.To = 1;
GIFStoryBoard.Begin();
}
private void HideGif()
{
GIFDoubleAnimation.To = 76;
GIFBorderDoubleAnimation.To = 0;
GIFStoryBoard.Begin();
}
public static DependencyProperty IsAllowProperty { get; } = DependencyProperty.Register(
"IsAllow", typeof(bool), typeof(PermissionBlock), new PropertyMetadata(false, IsAllowPropertyChanged)
);
private static void IsAllowPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if ((bool)e.NewValue)
{
((PermissionBlock)d).Hide();
}
else
{
((PermissionBlock)d).Show();
}
}
public bool IsAllow
{
get
{
return (bool)GetValue(IsAllowProperty);
}
set
{
SetValue(IsAllowProperty, value);
}
}
private void Show()
{
Visibility = Visibility.Visible;
}
private void Hide()
{
Visibility = Visibility.Collapsed;
HideGif();
}
public PermissionBlock()
{
this.InitializeComponent();
}
public event Action Click;
private void ActiveButton_Click(object sender, RoutedEventArgs e)
{
Click?.Invoke();
}
private void PointerEntered(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs e)
{
ShowGif();
}
private void PointerExited(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs e)
{
HideGif();
}
}
}

wpf 中的 自定义控件的 binding的更多相关文章
- WPF中关于自定义控件的滚动条鼠标停留在内容上鼠标滚轮滚动无效的问题
问题起因:在一个用户控件里放置了1个TreeView垂直顺序放置. 当用户控件中的内容超过面板大小时,滚动条会自动出现 ,但是只有当鼠标指示在右边滚动条的那一条位置时,才支持鼠标滚轴滚动. 点在控件内 ...
- WPF中的数据绑定Data Binding使用小结
完整的数据绑定的语法说明可以在这里查看: http://www.nbdtech.com/Free/WpfBinding.pdf MSDN资料: Data Binding: Part 1 http:// ...
- 在WPF中自定义控件
一, 不一定需要自定义控件在使用WPF以前,动辄使用自定义控件几乎成了惯性思维,比如需要一个带图片的按钮,但在WPF中此类任务却不需要如此大费周章,因为控件可以嵌套使用以及可以为控件外观打造一套新的样 ...
- 【转】WPF中Binding的技巧(一)
WPF中Binding的技巧(一) 在WPF应用的开发过程中Binding是一个非常重要的部分. 在实际开发过程中Binding的不同种写法达到的效果相同但事实是存在很大区别的. 这里将实际中碰到 ...
- 【转】WPF中的Binding技巧(二)
WPF中的Binding技巧(二) 接上篇, 我们来看一看Elementname,Source,RelativeSource 三种绑定的方式 1.ElementName顾名思义就是根据Ui元素 ...
- Binding在WPF中的使用
闲来无事,不想打DOTA,在这里小小研究下wpf中关于Binding的东西. 咯咯 在我们印象中,Binding的意思是“绑定”,这个“绑”大概取自于Bind这个单词吧,这么理解的话就是以音译英了,没 ...
- WPF中添加Winform用户自定义控件
过程:创建WPF工程->创建Winform用户自定义控件工程->WPF中引用控件->添加到Xaml页面 1.首先在WPF工程的解决方案上右击选择添加新建项目: 选择Windows窗体 ...
- WPF binding<一> Data Binding在WPF中的地位
在代码中看到 <Image Source="{Binding ElementName=LBoxImages, Path=SelectedItem.Source}" /> ...
- 在WPF中自定义控件(3) CustomControl (上)
原文:在WPF中自定义控件(3) CustomControl (上) 在WPF中自定义控件(3) CustomControl (上) 周银辉 ...
随机推荐
- YAOI Round #5 题解
前言 比赛链接: Div.1 : http://47.110.12.131:9016/contest/13 Div.2 : http://47.110.12.131:9016/contest/12 D ...
- vue(19)嵌套路由
嵌套路由 有时候在路由中,主要的部分是相同的,但是下面可能是不同的.比如访问首页,里面有新闻类的/home/news,还有信息类的/home/message.这时候就需要使用到嵌套路由.项目结构如下: ...
- python 模拟点击微信
from PyQt5 import QtCore,QtWidgets import win32gui, win32api, win32con # 调用win32api的模拟点击功能实现ctrl+v粘贴 ...
- viewport深入理解和使用
什么是viewport ? viewport是用户网页的可视区域,也可叫做视区.手机浏览器是把页面放在一个虚拟的窗口(viewport)中,通常这个虚拟的窗口比屏幕宽,这样就不用把网页挤到很小的窗口中 ...
- Leetcode春季打卡活动 第二题:206. 反转链表
Leetcode春季打卡活动 第二题:206. 反转链表 206. 反转链表 Talk is cheap . Show me the code . /** * Definition for singl ...
- PphpStorm常用操作整理
本地修改记录:在项目名称上右键,点击Local History | Show History.你可以看到项目文件各个历史版本:Alt+Shift+C,可以看到项目最近的修改.这就是它的版本集成功能特性 ...
- selenium 鼠标,键盘操作
1.鼠标操作 导包:from selenium.webdriver.common.action_chains import ActionChains 1.context_click() ...
- C++第四十六篇 -- C++将int转换成宽字符串
int rate = 60; int score = 80 TCHAR Temp[64] = TEXT(""); _stprintf_s(Temp, TEXT("pass ...
- Python - 基础数据类型 tuple 元组
元组简单介绍 元组是一个和列表和相似的数据类型,也是一个有序序列 两者拥有着基本相同的特性,但是也有很多不同的地方 声明元组 var = (1, 2, 3) var = ("1", ...
- 深入jvm虚拟机--第一篇 void TemplateInterpreterGenerator::generate_and_dispatch(Template* t, TosState tos_out) 函数
今天第一次使用虚拟姐打断点,断点设置在了void TemplateInterpreterGenerator::generate_and_dispatch(Template* t, TosState t ...