代码之家  ›  专栏  ›  技术社区  ›  berti

如何在XAML中将按钮绑定到滑块和文本框

  •  0
  • berti  · 技术社区  · 11 年前

    我有一个ListView,该ListView的一列包括一个Slider、一个TextBox和一个Button。滑块绑定到属性(类型 double )在我的ViewModel中。当我移动滑块时,TextBox中的值会自动更新。然而,我的按钮还不起作用。它应该在每次单击时增加值。有人知道如何在XAML中添加此功能吗。

    <GridViewColumn Width="345">
        <GridViewColumnHeader Content="Wert" Command="{Binding SortCommand}" CommandParameter="Value" />
        <GridViewColumn.CellTemplate>
            <DataTemplate>
                <DockPanel VerticalAlignment="Center" Margin="10">
                    <Slider Name="slValue" Value="{Binding Value, Mode=TwoWay}" Minimum="{Binding MinValue}" Maximum="{Binding MaxValue}" TickPlacement="BottomRight" TickFrequency="{Binding StepSize}" Width="205" />
                    <TextBox Text="{Binding ElementName=slValue, Path=Value, UpdateSourceTrigger=PropertyChanged}" DockPanel.Dock="Right" TextAlignment="Right" Width="40" />
                    <Button Name="IncrementValue" Width="40" Height="40" />
                </DockPanel>
            </DataTemplate>
        </GridViewColumn.CellTemplate>
    </GridViewColumn>
    

    编辑: 实际上,我需要使用普通按钮,而不是ToggleButton。我刚换了衣服 ToggleButton Button .

    1 回复  |  直到 11 年前
        1
  •  1
  •   Nadia Chibrikova    11 年前

    您可以使用按钮的EventTrigger更改滑块的值,文本框将自动更新。

     <ToggleButton Name="Toggle" Width="40" Height="40" >
                <ToggleButton.Triggers>
                    <EventTrigger RoutedEvent="ToggleButton.Click" >
                        <BeginStoryboard>
                            <Storyboard>
                                <DoubleAnimation By="1" Duration="00:00:00" Storyboard.TargetName="slValue" Storyboard.TargetProperty="Value"/>
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger>
                </ToggleButton.Triggers>
            </ToggleButton>
    

    您可以处理按钮的单击事件并修改按钮的同级滑块的值:

     private void IncrementValue_Click(object sender, RoutedEventArgs e)
        {
            ((((Button)sender).Parent as DockPanel).Children[0] as Slider).Value++;
        }
    

    这里我假设滑块是停靠面板的第一个元素,如果您更改其位置,则应在 Children[0]