zoukankan      html  css  js  c++  java
  • 绑定: TemplateBinding 绑定, 与 RelativeSource 绑定, 与 StaticResource 绑定

    介绍
    背水一战 Windows 10 之 绑定

    • TemplateBinding 绑定
    • 与 RelativeSource 绑定
    • 与 StaticResource 绑定



    示例
    1、演示 TemplateBinding 的用法
    Bind/TemplateBindingDemo.xaml

    复制代码
    <Page
        x:Class="Windows10.Bind.TemplateBindingDemo"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:Windows10.Bind"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d">
    
        <Grid Background="Transparent">
            <StackPanel Margin="10 0 10 10">
    
                <!--
                    演示 TemplateBinding 的用法
                    TemplateBinding 是一个简单版的 Binding,用于在 ControlTemplate 中做属性之间的绑定(如果需要 Binding 的其他特性该怎么做呢?参见 BindingRelativeSource.xaml)
                -->
    
                <StackPanel.Resources>
                    <Style x:Key="ButtonStyle" TargetType="Button">
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="Button">
                                    <StackPanel>
                                        <!--
                                            ContentPresenter 的 Width 绑定 Button 的 Width
                                            ContentPresenter 的 Height 绑定 Button 的 Width
                                        -->
                                        <ContentPresenter HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Foreground="White" Background="Orange"
                                                          Width="{TemplateBinding Width}" Height="{TemplateBinding Width}" />
                                    </StackPanel>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </StackPanel.Resources>
    
                <Button Content="我是 Button" Width="128" Style="{StaticResource ButtonStyle}" />
    
            </StackPanel>
        </Grid>
    </Page>
    复制代码


    2、演示 Binding 中的一个扩展标记 RelativeSource 的应用
    Bind/BindingRelativeSource.xaml

    复制代码
    <Page
        x:Class="Windows10.Bind.BindingRelativeSource"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:Windows10.Bind"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d">
    
        <Grid Background="Transparent">
            <StackPanel Margin="10 0 10 10">
    
                <!--
                    演示 Binding 中的一个扩展标记 RelativeSource 的应用,其用于指定关联数据源为 Self 或 TemplatedParent
                -->
    
                <!--
                    RelativeSource={RelativeSource TemplatedParent} - 仅在 ControlTemplate 中适用,用于指定数据源来自引用了该 ControlTemplate 的 Control
                -->
                <StackPanel.Resources>
                    <Style x:Key="ButtonStyle" TargetType="Button">
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="Button">
                                    <StackPanel>
                                        <ContentPresenter Foreground="White" />
                                        <!--
                                            TemplateBinding 是一个简单版的 Binding,他是 OneWay 的
                                        
                                            如果在设计 ControlTemplate 时需要 Binding 的其他特性(比如我想要 TwoWay 的模式)该怎么办呢?
                                            那就需要通过 Binding 来做绑定(这样就可以使用 Binding 的各种特性了),然后通过 RelativeSource={RelativeSource TemplatedParent} 来指定数据源来自引用了该 ControlTemplate 的 Control
                                        -->
                                        <Slider Minimum="1" Maximum="100" Foreground="White" IsThumbToolTipEnabled="False"
                                                Width="{TemplateBinding Width}" Value="{Binding Content, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" />
                                    </StackPanel>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </StackPanel.Resources>
    
                <Button Width="300" Content="50" Style="{StaticResource ButtonStyle}" Margin="5" />
    
    
                
                <!--
                    RelativeSource={RelativeSource Self} - 指定数据源为自己本身
                -->
                <TextBlock Text="{Binding RelativeSource={RelativeSource Self}, Path=Tag}" Tag="webabcd" Margin="5" />
    
            </StackPanel>
        </Grid>
    </Page>
    复制代码


    3、演示如何与 StaticResource 绑定
    Bind/BindingStaticResource.xaml

    复制代码
    <Page
        x:Class="Windows10.Bind.BindingStaticResource"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:Windows10.Bind"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d">
    
        <Grid Background="Transparent">
            <StackPanel Margin="10 0 10 10" x:Name="panel">
    
                <!--
                    演示如何与 StaticResource 绑定
                    关于 StaticResource 的说明请参见:/Resource/StaticResourceDemo.xaml
                -->
    
                <StackPanel.Resources>
    
                    <x:Double x:Key="TextFontSize">32</x:Double>
                    <SolidColorBrush x:Key="TextForeground" Color="#00FF00" />
    
                    <Style x:Key="MyStyle" TargetType="TextBox">
                        <!--绑定 StaticResource 资源-->
                        <Setter Property="FontSize" Value="{Binding Source={StaticResource TextFontSize}}"/>
                        <!--绑定 StaticResource 资源的简化写法-->
                        <Setter Property="Foreground" Value="{StaticResource TextForeground}"/>
                    </Style>
                    
                </StackPanel.Resources>
    
                <!--绑定 StaticResource 资源-->
                <TextBox Text="我是TextBox" Style="{Binding Source={StaticResource MyStyle}}" Margin="5" />
    
                <!--绑定 StaticResource 资源的简化写法-->
                <TextBox Text="我是TextBox" Style="{StaticResource MyStyle}" Margin="5" />
    
                <!--演示如何在 C# 端绑定 StaticResource-->
                <TextBox Name="textBox" Text="我是TextBox" Margin="5" />
    
            </StackPanel>
        </Grid>
    </Page>
    复制代码

    Bind/BindingStaticResource.xaml.cs

    复制代码
    /*
     * 演示如何与 StaticResource 绑定(关于 StaticResource 的说明请参见:/Resource/StaticResourceDemo.xaml)
     */
    
    using Windows.UI.Xaml;
    using Windows.UI.Xaml.Controls;
    using Windows.UI.Xaml.Data;
    
    namespace Windows10.Bind
    {
        public sealed partial class BindingStaticResource : Page
        {
            public BindingStaticResource()
            {
                this.InitializeComponent();
    
                this.Loaded += BindingStaticResource_Loaded;
            }
    
            // 在 C# 端绑定 StaticResource
            private void BindingStaticResource_Loaded(object sender, RoutedEventArgs e)
            {
                // 实例化 Binding 对象
                Binding binding = new Binding()
                {
                    Source = panel.Resources["MyStyle"]
                };
    
                // 将目标对象的目标属性与指定的 Binding 对象关联
                BindingOperations.SetBinding(textBox, TextBox.StyleProperty, binding);
            }
        }
    }
  • 相关阅读:
    点击子窗体给父窗体上的对象赋值
    框架使用及规范参考
    像Google日历一样的日程管理
    TreeView 和 Menu 的用法
    甘特图-svg版 支持客户端事件
    js获取DropDownList的选择项
    GridView,Repeater分页控件:WebPager(开源)
    TextBox 禁止客户端输入 前台通过JS赋值 并在后台获取
    对象实体 参考标准
    以编程方式控制ScriptManager
  • 原文地址:https://www.cnblogs.com/ansen312/p/5913448.html
Copyright © 2011-2022 走看看