Я хочу изменить цвет линии, используя «триггер кнопки» в определенных условиях - PullRequest
0 голосов
/ 20 мая 2019

Я хочу изменить цвет линии1 и линии2, как показано ниже.Как я могу связать переменную в коде C #?Есть ли хорошее решение для разрешения кода ниже?

  • xaml code
<ControlTemplate TargetType="ToggleButton">
    <Grid>
        <Grid Width="6" Height="6" HorizontalAlignment="Right" Margin="0,0,14,0">
            <Line x:Name="line1" X1="0" Y1="0" X2="6" Y2="6" Stroke="#BDC4CF" StrokeThickness="1"/>
            <Line x:Name="line2" X1="0" Y1="6" X2="6" Y2="0" Stroke="#BDC4CF" StrokeThickness="1"/>
        </Grid>
    </Grid>

    <ControlTemplate.Triggers>
        <Trigger Property="IsChecked" Value="True">
            <Setter TargetName="line1" Property="Stroke" Value="{binding linecolor}"/>
            <Setter TargetName="line2" Property="Stroke" Value="{binding linecolor}"/>
        </Trigger>
    </ControlTemplate.Triggers>
</ControlTemplate>
  • c # code
public bool IsChecked
{
    get { return (bool)GetValue(IsCheckedProperty); }
    set
    {
        SetValue(IsCheckedProperty, value);
        ToggleBtn.IsChecked = value;

        if(isPicked == true)
        {
            linecolor = (Brush)(new BrushConverter().ConvertFrom("#3EF79B"));
        }
        else
        {
            linecolor = (Brush)(new BrushConverter().ConvertFrom("#FFFFFF"));
        }
    }
}

1 Ответ

0 голосов
/ 21 мая 2019

Я думаю, вам нужно переосмыслить свой подход здесь. Сначала есть некоторые неизвестные вещи. Единственное, что я предполагаю, это то, что ваш isPicked логический объект является свойством.

То, как я бы поступил, использует ValueConverter

Итак, прежде всего в DataContext вашей точки зрения, у меня будет свойство IsPicked:

private bool isPicked;
public bool IsPicked
{
    get { return isPicked; }
    set { isPicked = value; OnPropertyChanged(); }
}

Тогда я бы создал новый файл .cs для конвертера:

class BoolToColor : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return (bool)value ? "#3EF79B" : "#FFFFFF";
        /*Same as:
        if((bool)value) 
        {
            return "#3EF79B";
        } 
        else 
        {
            return "#FFFFFF";
        }*/
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

затем, наконец, установите все это в представлении (в этом случае я использовал Window):

<Window.Resources>
    <local:BoolToColor x:Key="BoolToColor" />
</Window.Resources>
<Grid>
    <Button Width="50" Height="50" Click="Button_Click" />
    <Grid Width="20" Height="20" HorizontalAlignment="Right" Margin="0,0,14,0">
        <Line x:Name="line1" X1="0" Y1="0" X2="20" Y2="20" Stroke="{Binding IsPicked, Converter={StaticResource BoolToColor}}" StrokeThickness="1"/>
        <Line x:Name="line2" X1="0" Y1="20" X2="20" Y2="0" Stroke="{Binding IsPicked, Converter={StaticResource BoolToColor}}" StrokeThickness="1"/>
    </Grid>
</Grid>

Но подождать, есть кнопка? Да, я добавил кнопку, чтобы проверить изменение цвета. Вот код для Button_Click:

private void Button_Click(object sender, RoutedEventArgs e)
{
    IsPicked = !IsPicked;
}

Наконец, я надеюсь, вы поймете, что вместо кнопки вы можете изменить значение свойства IsPicked, чтобы установить цвет. Я надеюсь, что это поможет вам продолжить ваш проект :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...