user1108948
user1108948

Reputation:

Enable a button on slider values

I have three sliders and one button. The button has a click event.

What I want is when the sum of three slider values is greater than 0, than enable this button.

The code is simple, I guess:

int total = slider1.Value + slider2.Value + slider3.Value;
if total > 0
   btnStart.Enable = true;
else
   btnStart.Enable = false;

The question is I don't know where should I place the code. If I put it in slider events, there are three. It is duplicated.

However if we have many many sliders, is the method foolish?

Upvotes: 0

Views: 355

Answers (1)

DeMama
DeMama

Reputation: 1202

Just create a ValueChanged event and attach it on your three sliders e.g:

private void Slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
   btnStart.IsEnabled = (slider1.Value > 0 && slider2.Value > 0 && slider3.Value > 0);
}

XAML would look like this:

<Slider x:Name="slider1" ValueChanged="Slider_ValueChanged"/>
<Slider x:Name="slider2" ValueChanged="Slider_ValueChanged"/>
<Slider x:Name="slider3" ValueChanged="Slider_ValueChanged"/>

Example for your button:

<Button x:Name="btnStart" IsEnabled="False">
    <Button.Style>
        <Style TargetType="{x:Type Button}">
            <Setter Property="IsHitTestVisible" Value="True"/>
            <Setter Property="Background" Value="Red"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Button}">
                        <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}">
                            <ContentPresenter Content="{TemplateBinding Content}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"/>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <Trigger Property="IsEnabled" Value="False">
                    <Setter Property="IsHitTestVisible" Value="False"/>
                    <Setter Property="Background" Value="Green"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>

Upvotes: 1

Related Questions