快速换行的快捷键

vs 工具->选项->文本编辑器->XAML->Formatting(格式化)->spacing(间距)-> 选择第三个 ,将各个属性分行放置。

然后按Ctrl+K+D

如何快速生成下面的代码

鼠标放在Slider_ValueChanged上面然后Fn+F12 就可以快速生成

wpf中的绑定

在WPF数据绑定中,有几种不同的绑定模式,每种模式定义了数据如何在绑定目标(通常是UI控件)和绑定源(如视图模型)之间流动。以下是这些绑定模式的简要说明:

单项绑定(OneWay Binding)

单项绑定是最常见的数据绑定模式,数据只能从绑定源流向绑定目标。当源属性更改时,这些更改会自动反映到绑定的目标上,但目标的更改不会反馈到源。

  • 用途:适用于只从源更新到目标的情况,例如,显示数据。

  • XAMLMode=OneWay

<TextBox Text="{Binding Path=PropertyName, Mode=OneWay}" />

双向绑定(TwoWay Binding)

双向绑定允许数据在绑定目标和绑定源之间双向流动。这意味着用户对绑定目标(如文本框)所做的更改会自动更新绑定源的属性,反之亦然。

  • 用途:适用于需要收集用户输入并更新数据源的情况。

  • XAMLMode=TwoWay

<TextBox Text="{Binding Path=PropertyName, Mode=TwoWay}" />

单次绑定(OneTime Binding)

单次绑定仅在绑定初始化时将数据从绑定源传输到绑定目标。之后,即使源更改,目标也不会更新。

  • 用途:适用于只需要设置初始值,之后不再需要同步的情况。

  • XAMLMode=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();
        }
​
        
    }
}

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐