我正在画一个ContextMenu
,里面有slider
。
这是我的实际代码:
<MenuItem x:Name="menuSliderOpacity" Header="Opacidade" Width="100">
<MenuItem.Template>
<ControlTemplate TargetType="{x:Type MenuItem}">
<Slider Width="100"
Name="sliderOpacity"
Minimum="0"
Maximum="1"
TickFrequency="0.1"
IsSnapToTickEnabled="True"
ValueChanged="Slider_ChangeOpacity"
Value="{Binding ElementName=btnBackground, Path=Opacity, Mode=TwoWay}"/>
</ControlTemplate>
</MenuItem.Template>
</MenuItem>
现在这是我里面的信息。这个slider
将控制屏幕上某物(例如button
)的背景不透明度。首先,我尝试过:
在按钮上
{Binding ElementName=sliderOpacity, Path=Value}
或者类似“我的双向滑块方式的价值”之类的东西。 我如何建立联系?之后,我如何获取或设置代码隐藏滑块的值。
正确的方法是什么?
答案 0 :(得分:3)
您可以通过不同的方式进行操作。
您可以像在XAML代码中一样使用绑定。
这可能是您按钮的代码:
<Button x:Name="btnBackgroundCodeBehind" Content="Code Behind Button" />
这是菜单的XAML代码:
<Menu Grid.Column="2">
<MenuItem x:Name="menuSliderOpacity" Header="Opacidade" Width="100">
<MenuItem.Template>
<ControlTemplate TargetType="{x:Type MenuItem}">
<Slider Width="100"
x:Name="sliderOpacity"
Minimum="0"
Maximum="1"
TickFrequency="0.1"
IsSnapToTickEnabled="True"
ValueChanged="Slider_ChangeOpacity"
Value="{Binding ElementName=btnBackground, Path=Opacity, Mode=OneWayToSource}"/>
</ControlTemplate>
</MenuItem.Template>
</MenuItem>
您在(几乎)后面的代码中执行相同的操作。您的方法Slider_ChangeOpacity可能如下所示:
private void Slider_ChangeOpacity(object sender, RoutedPropertyChangedEventArgs<double> e)
{
btnBackgroundCodeBehind.Opacity = e.NewValue;
}
我说几乎是因为这只是一种单向解决方案,它只是从滑块到按钮。
如果要使用MVVM结构,则可以绑定到视图模型。
最好的方法是根据您的情况。如果您创建一个复杂的程序,我希望绑定到视图模型。比起我希望直接绑定,您只想创建一个视图供您将来使用。如果必须对其中的数据(按钮和滑块)之间的数据进行更复杂的处理,则应在后面使用代码。
希望这可以回答您的问题。
答案 1 :(得分:1)
我的解决方法是:
new
好吧,我不知道如何正确使用Binding,所以我尝试避免这种情况。 只需这段代码,我就完成了我想要的
<MenuItem Width="120" x:Name="menuSlider">
<MenuItem.Template>
<ControlTemplate TargetType="{x:Type MenuItem}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<Label Grid.Row="0">Opacidade</Label>
<Slider
Grid.Row="1"
Margin="5,5,5,5"
Width="100"
Name="sliderOpacity"
Minimum="0"
Maximum="1"
TickFrequency="0.1"
IsSnapToTickEnabled="True"
Value="{Binding OpacityBackground,Mode=TwoWay}"/>
</Grid>
</ControlTemplate>
</MenuItem.Template>
</MenuItem>