wpf 的binding 方式

参考:WPF中的Binding的常见知识点与技巧_哔哩哔哩_bilibili

总结了一些:wpf中的binding的方式。

<Window x:Class="WpfBindingDemo.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"

FontSize="20"

xmlns:sys="clr-namespace:System;assembly=mscorlib"

xmlns:local="clr-namespace:WpfBindingDemo"

mc:Ignorable="d"

x:Name="myWindow"

Title="MainWindow" Height="1050" Width="800">

<Window.DataContext>

<local:MainViewModel></local:MainViewModel>

</Window.DataContext>

<Window.Resources>

<sys:String x:Key="test">测试数据</sys:String>

<local:MyResource x:Key="myres"></local:MyResource>

</Window.Resources>

<Grid>

<StackPanel Margin="10" Orientation="Vertical" VerticalAlignment="Top">

<TextBox Text="{DynamicResource test}" x:Name="txtName" ></TextBox>

<TextBlock Text="{Binding Source={StaticResource test} }" x:Name="txtTest" Width="460" Height="40"></TextBlock>

<TextBlock Text="{StaticResource test}" Width="460" Height="40"></TextBlock>

<TextBlock Text="{DynamicResource test}" Width="460" Height="40"></TextBlock>

<TextBlock Text="{Binding Source={StaticResource myres},Path=Message}" Width="460" Height="40"></TextBlock>

<TextBlock Text="{Binding Source={x:Static local:MyResource.ConstString}}" Width="460" Height="40"></TextBlock>

<TextBlock Text="{Binding Source={x:Static local:MyResource.StaticString}}" Width="460" Height="40"></TextBlock>

<TextBlock Text="{Binding Source={x:Static local:MyEnum.Message}}" Width="460" Height="40"></TextBlock>

<TextBlock Text="{Binding ElementName=txtName, Path=Text}" Width="460" Height="40"></TextBlock>

<TextBlock Text="{Binding ElementName=txtName,Path=Text}">

<TextBlock.ToolTip>

<TextBlock Text="{Binding ElementName=txtName,Path=Text}"></TextBlock><!--没有提示-->

</TextBlock.ToolTip>

</TextBlock>

<TextBlock Text="{Binding ElementName=txtName,Path=Text}">

<TextBlock.ToolTip>

<TextBlock Text="{Binding Source={x:Reference Name=txtName},Path=Text}"></TextBlock> <!--ok-->

</TextBlock.ToolTip>

</TextBlock>

<Button x:Name="btnTest" Width="100" Content="Click"></Button>

<DataGrid>

<DataGrid.Columns>

<DataGridTextColumn Header="ID"></DataGridTextColumn>

<DataGridTextColumn Header="{Binding ElementName=txtName,Path=Text}"></DataGridTextColumn><!--没有提示-->

<DataGridTextColumn Header="Class"></DataGridTextColumn>

<DataGridTextColumn Header="{Binding Source={x:Reference Name=txtName },Path=Text}"></DataGridTextColumn><!--ok-->

</DataGrid.Columns>

</DataGrid>

<TextBlock Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window},Path=Top,StringFormat='Top:{0:F3}'}"></TextBlock>

<TextBlock Text="{Binding RelativeSource={RelativeSource Mode=Self},Path=ActualHeight,StringFormat='Height:{0:C}'}"></TextBlock>

<TextBlock>

<TextBlock.Text>

<MultiBinding StringFormat="Pos:{0:F2},{1:F2}">

<Binding ElementName="myWindow" Path="Top"></Binding>

<Binding ElementName="myWindow" Path="Left"></Binding>

</MultiBinding>

</TextBlock.Text>

</TextBlock>

<Label Content="{Binding RelativeSource={RelativeSource Mode=Self},Path=ActualHeight}" ContentStringFormat="Lable Height:{0:F0}"></Label>

<ListBox>

<TextBlock Text="{Binding RelativeSource={RelativeSource AncestorType=ListBoxItem},Path=IsSelected}"></TextBlock>

<TextBlock Text="{Binding RelativeSource={RelativeSource AncestorType=ListBoxItem},Path=IsSelected}"></TextBlock>

<TextBlock Text="{Binding RelativeSource={RelativeSource AncestorType=ListBoxItem},Path=IsSelected}"></TextBlock>

</ListBox>

<Label Padding="2" Content="测试label" Height="30">

<Label.Template>

<ControlTemplate TargetType="Label">

<Border BorderBrush="Red" BorderThickness="1" Margin="{Binding RelativeSource={RelativeSource Mode=TemplatedParent},Path=Padding}">

<ContentPresenter></ContentPresenter>

</Border>

</ControlTemplate>

</Label.Template>

</Label>

<TextBlock Text="{Binding MessageKong,TargetNullValue=空}"></TextBlock>

<TextBlock Text="{Binding MessageKong2,FallbackValue=MessageKong2不存在}"></TextBlock>

</StackPanel>

</Grid>

</Window>

类文件

namespace WpfBindingDemo

{

/// <summary>

/// Interaction logic for MainWindow.xaml

/// </summary>

public partial class MainWindow : Window

{

public MainWindow()

{

InitializeComponent();

this.Resources"test" = DateTime.Now.ToString();

}

}

class MyResource

{

public string Message { get; set; } = "test 哈哈";

public static string StaticString = "static string";

public const string ConstString = "Const string";

}

public enum MyEnum

{

Message,

OK,

Error

}

MainViewModel.cs

namespace WpfBindingDemo

{

public class MainViewModel

{

public string Name { get; set; }

public string Message { get; set; } = "test 哈哈";

public string MessageKong { get; set; }

}

}

相关推荐
传奇开心果编程8 小时前
【ArkUI 练中学】第15课:UI 界面设计与实战
学习·ui·华为·harmonyos
HwJack208 小时前
【HarmonyOS开发小实践】ArkUI 动画系统属性动画、显式动画与路径动画
ui·性能优化·harmonyos
传奇开心果编程10 小时前
【Flutter入门练中学】第2课:布局系统
学习·flutter·ui
传奇开心果编程11 小时前
【Jetpack Compose基础语法学与练】第8课 rememberSaveable,页面旋转/系统重建保留状态
android·学习·ui·kotlin·android jetpack
xy345313 小时前
Axure 9.0 中继器核心结构
前端·ui·html·axure·原型·产品设计
传奇开心果编程15 小时前
【Jetpack Compose基础语法学与练】第7课 if条件渲染 + 列表基础(LazyColumn)
学习·ui·kotlin·android jetpack
传奇开心果编程16 小时前
【SwiftUI入门练中学】第1课 从零开始
学习·ui·ios·swiftui·swift
传奇开心果编程16 小时前
【Jetpack Compose基础语法学与练】第9课 SideEffect副作用 + LaunchedEffect,处理异步任务和生命周期
android·学习·ui·kotlin·android jetpack
传奇开心果编程16 小时前
【ArkUI 练中学】第14课:应用性能优化实战
学习·ui·华为·harmonyos
dalong1017 小时前
WPF:Modbus 状态监控
wpf·modbus