ControlTemplate中的WPF XAML绑定属性

sdnqo3pr  于 2023-01-18  发布在  其他
关注(0)|答案(1)|浏览(180)

我尝试创建一个ControlTemplate,它表示一个Slider和一个TextBox(以及一个Label),其中TextBox的文本应该显示Slider的值。
我不知道如何正确设置SliderValue属性和TextBoxText属性之间的绑定。
这是我的ControlTemplate

<ControlTemplate x:Key="myslider" TargetType="Slider">
    <StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
        <Label>Slider</Label>
        <Slider 
            Width="100" 
            Minimum="0" Maximum="100"/>
        <TextBox Width="40" 
            Text="{Binding RelativeSource={RelativeSource TemplatedParent}, 
                Path=Value}">
        </TextBox>
    </StackPanel>              
</ControlTemplate>

这里我使用ControlTemplate示例化了3个Slider:

<StackPanel>
    <Slider Template="{StaticResource myslider}"></Slider>
    <Slider Template="{StaticResource myslider}"></Slider>
    <Slider Template="{StaticResource myslider}"></Slider>
</StackPanel>

结果如下所示:

目标是每个滑块控制单个TextBox中的值。

mf98qq94

mf98qq941#

我更喜欢使用用户控件作为首选。但是如果我们按照你的思路,Slider和TextBox的共享值应该是父Slider上的Value依赖属性。
测试代码如下:

<Window.Resources>
    <ControlTemplate x:Key="myslider" TargetType="Slider">
        <StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
            <Label>Slider</Label>

            <Slider 
                Value="{Binding RelativeSource={RelativeSource TemplatedParent},Path=Value,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,Delay=10}"
                    
                Minimum="{Binding RelativeSource={RelativeSource TemplatedParent},Path=Minimum,Mode=OneWay}"
                    
                Maximum="{Binding RelativeSource={RelativeSource TemplatedParent},Path=Maximum,Mode=OneWay}"
                    
                Width="100" 
                />

            <TextBox Width="100" 
                Text="{Binding RelativeSource={RelativeSource TemplatedParent}, 
                Path=Value,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,Delay=10}">
            </TextBox>
                
        </StackPanel>
    </ControlTemplate>
</Window.Resources>
<Grid>
    <StackPanel Orientation="Vertical">

        <Slider Template="{StaticResource myslider}" Minimum="0" Maximum="100"></Slider>
        <Slider Template="{StaticResource myslider}" Minimum="0" Maximum="100"></Slider>
        <Slider Template="{StaticResource myslider}" Minimum="0" Maximum="100"></Slider>
    </StackPanel>
        
</Grid>

相关问题