使用{x:Bind}绑定到XAML属性,即替换{TemplateBinding XAMLProperty}

sbdsn5lh  于 2022-12-31  发布在  其他
关注(0)|答案(1)|浏览(113)

据记载in MSDN
从Windows 10版本1809开始,您可以在ControlTemplate中使用TemplateBinding的任何位置使用x:Bind标记扩展。
然而,当我尝试用**{x:Bind}替换TemplateBinding**,同时定义自定义控件的样式时,

<Style TargetType="local:PomodoroTimer" >
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="local:PomodoroTimer">
                    <Grid Width="300" Height="300" Background="{x:Bind Background}">
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

出现以下错误:Unable to resolve symbol 'Background'我错过了什么?

k75qkfdt

k75qkfdt1#

x:Bind需要代码隐藏。(请参阅此处)
因此,多亏了MainWindow.xaml.cs,这才得以实现:

<Window
    x:Class="Bindings.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:local="using:Bindings"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">
    <Grid>
        <Grid.Resources>
            <Style
                x:Key="CustomButtonStyle"
                TargetType="Button">
                <Style.Setters>
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="Button">
                                <Border
                                    BorderBrush="{x:Bind BorderBrush, Mode=OneWay}"
                                    BorderThickness="{x:Bind BorderThickness, Mode=OneWay}">
                                    <ContentControl Content="{x:Bind Content, Mode=OneWay}" />
                                </Border>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style.Setters>
            </Style>
        </Grid.Resources>
        <Button
            BorderBrush="SkyBlue"
            BorderThickness="1"
            Content="Custom Button"
            Style="{StaticResource CustomButtonStyle}" />
    </Grid>
</Window>

对于自定义(模板化)控件,我会选择:

Text="{TemplateBinding Text}"

Text="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=Text, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"

用于双向绑定。
如果您想在ControlTemplate中执行x:Bind,这个answer可能会有所帮助。

相关问题