快速换行的快捷键
vs 工具->选项->文本编辑器->XAML->Formatting(格式化)->spacing(间距)-> 选择第三个 ,将各个属性分行放置。
然后按Ctrl+K+D
如何快速生成下面的代码
鼠标放在Slider_ValueChanged上面然后Fn+F12 就可以快速生成
wpf中的绑定
在WPF数据绑定中,有几种不同的绑定模式,每种模式定义了数据如何在绑定目标(通常是UI控件)和绑定源(如视图模型)之间流动。以下是这些绑定模式的简要说明:
单项绑定(OneWay Binding)
单项绑定是最常见的数据绑定模式,数据只能从绑定源流向绑定目标。当源属性更改时,这些更改会自动反映到绑定的目标上,但目标的更改不会反馈到源。
-
用途:适用于只从源更新到目标的情况,例如,显示数据。
-
XAML:
Mode=OneWay
<TextBox Text="{Binding Path=PropertyName, Mode=OneWay}" />
双向绑定(TwoWay Binding)
双向绑定允许数据在绑定目标和绑定源之间双向流动。这意味着用户对绑定目标(如文本框)所做的更改会自动更新绑定源的属性,反之亦然。
-
用途:适用于需要收集用户输入并更新数据源的情况。
-
XAML:
Mode=TwoWay
<TextBox Text="{Binding Path=PropertyName, Mode=TwoWay}" />
单次绑定(OneTime Binding)
单次绑定仅在绑定初始化时将数据从绑定源传输到绑定目标。之后,即使源更改,目标也不会更新。
-
用途:适用于只需要设置初始值,之后不再需要同步的情况。
-
XAML:
Mode=OneTime
<TextBox Text="{Binding Path=PropertyName, Mode=OneTime}" />
单项元素绑定(OneWayToSource Binding)
这个术语不是WPF数据绑定的标准模式,但它通常被用来描述单项绑定的一种变体,其中数据只从绑定目标流向绑定源。这不是WPF数据绑定的内置模式,但可以通过编程方式或自定义绑定实现。
更新源触发器(UpdateSourceTrigger)
对于双向绑定,UpdateSourceTrigger
属性定义了更新绑定源属性的时机:
-
PropertyChanged
:每当绑定目标属性更改时更新源(默认)。 -
LostFocus
:当绑定目标失去焦点时更新源。 -
Explicit
:只有当调用UpdateSource
方法时才更新源。
<TextBox Text="{Binding Path=PropertyName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
示例代码
以下是如何在XAML中使用这些绑定模式的示例:
<!-- 单项绑定 -->
<TextBox Text="{Binding Name, Mode=OneWay}" />
<!-- 双向绑定 -->
<TextBox Text="{Binding Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<!-- 单次绑定 -->
<TextBox Text="{Binding Name, Mode=OneTime}" />
在实际应用中,选择哪种绑定模式取决于你的具体需求和场景。如果你正在显示一个标签或只读字段,你可能会使用单项绑定。如果你需要用户能够编辑字段,并将更改保存回数据源,那么双向绑定是更好的选择。单次绑定可能用于设置初始值,而不需要后续同步。
例如双向绑定
复杂案例(没有使用双向简单绑定 比较繁琐)
<Window x:Class="_7._29day03WPF.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:_7._29day03WPF"
mc:Ignorable="d"
Title="MainWindow"
Height="450"
Width="800">
<Grid>
<StackPanel>
<Slider x:Name="slider"
Margin="5"
ValueChanged="Slider_ValueChanged" />
<TextBox x:Name="textbox1"
Margin="5"
Height="30" TextChanged="textbox1_TextChanged"
/>
<TextBox x:Name="textbox2"
Margin="5"
Height="30" />
<TextBox x:Name="textbox3"
Margin="5"
Height="30" />
</StackPanel>
</Grid>
</Window>
using System.Text;
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 _7._29day03WPF
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
textbox1.Text = slider.Value.ToString();
textbox2.Text = slider.Value.ToString();
textbox3.Text = slider.Value.ToString();
}
private void textbox1_TextChanged(object sender, TextChangedEventArgs e)
{
if (double.TryParse(textbox1.Text, out double result))
slider.Value = result;
}
}
}
可以通过拖动修改文本框的内容 也可以用文本框来修改Slider的位置
简单案例:
<Window x:Class="_7._29day03WPF.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:_7._29day03WPF"
mc:Ignorable="d"
Title="MainWindow"
Height="450"
Width="800">
<Grid>
<StackPanel>
<Slider x:Name="slider"
Margin="5" />
<TextBox Text="{Binding ElementName=slider,Path=Value, Mode=OneTime}"
Margin="5"
Height="30" />
<TextBox Text="{Binding ElementName=slider,Path=Value, Mode=OneWay}"
Margin="5"
Height="30" />
<TextBox Text="{Binding ElementName=slider,Path=Value,Mode=OneWayToSource}"
Margin="5"
Height="30" />
<TextBox Text="{Binding ElementName=slider,Path=Value,Mode=TwoWay}"
Margin="5"
Height="30" />
</StackPanel>
</Grid>
</Window>
using System.Text;
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 _7._29day03WPF
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
}