WPF, VB. net, изменение видимости изображения xaml при изменении значения ползунка - PullRequest
0 голосов
/ 26 мая 2020

Привет, newb ie здесь пытаюсь изменить видимость изображения при изменении значения ползунка Я пробовал три способа, но не повезло

  1. с использованием vb. net так
Private Sub SLIDERA_ValueChanged(sender As Object, e As RoutedPropertyChangedEventArgs(Of Double)) Handles SLIDERA.ValueChanged


       If SLIDERA.Value = 0 Then

           imageOFF.Visibility = Visibility.Hidden
           imageON.Visibility = Visibility.Visible
       End If
       If SLIDERA.Value = 0.5 Then
           imageOFF.Visibility = Visibility.Visible
           imageON.Visibility = Visibility.Hidden
       End If
       If SLIDERA.Value = 1 Then
           imageOFF.Visibility = Visibility.Hidden
           imageON.Visibility = Visibility.Visible
       End If
   End Sub

если я это сделаю, форма даже не запустится

xaml с использованием datatriger

<Window.Resources>
 <Style x:Key ="imageONstyle" TargetType="Image">
           <Setter Property="Visibility" Value="Hidden"/>
            <Style.Triggers>

            <DataTrigger Binding="{Binding ElementName=SILDERA, Path=Value}" Value="1">
                    <Setter Property="Visibility" Value="Visible"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>

        <Style x:Key ="imageOffstyle" TargetType="Image">
           <Setter Property="Visibility" Value="Hidden"/>
            <Style.Triggers>

                <DataTrigger Binding="{Binding ElementName=SILDERA, Path=Value}" Value="0">
                    <Setter Property="Visibility" Value="Visible"/>
                </DataTrigger>
            </Style.Triggers>


</Window.Resources>

 <Slider x:Name="SLIDERA"   Minimum="0" Maximum="1" Value="0.5" Margin="191,286,67,403" TickFrequency="0.5" IsSnapToTickEnabled="True"  SmallChange="0.5" LargeChange="0.5" Width="50" Height="16" ValueChanged="SLIDERA_ValueChanged"/>


        <Image  x:Name="imageON" Style="{StaticResource imageONstyle}" HorizontalAlignment="Left" Height="31" Margin="241,278,0,0" VerticalAlignment="Top" Width="21" Source="ButtonResources/LIGHTBULBON.png"/>

        <Image  x:Name="imageOFF" Style="{StaticResource imageOffstyle}" HorizontalAlignment="Left" Height="27" Margin="174,283,0,0" VerticalAlignment="Top" Width="16" Source="ButtonResources/LIGHTBULBOFF.png" />

, но ничего не делает

Не повезло с конвертером

1 Ответ

0 голосов
/ 26 мая 2020

Добро пожаловать в WPF и StackOverflow.

# 2 - ваш наиболее правильный подход. Лучше всего обрабатывать подобные изменения пользовательского интерфейса, если это возможно, полностью в XAML, практически без кода программной части. Это помогает сохранить logi c того, как приложение работает отдельно от того, как оно выглядит.

Единственная проблема, которую я вижу, это то, что ваш Slider называется SLIDERA, но в вашем Style у вас есть SILDERA - орфографическая ошибка. Это должно решить проблему - просто убедитесь, что вы не пытаетесь одновременно использовать подходы 1 и 2.


Отдельно я хотел бы дать вам несколько советов: не размещайте элементы используя Margin. Margin предназначен для обеспечения некоторого пространства между элементами, а не для указания им явной позиции. Вместо этого научитесь использовать различные панели WPF , такие как Grid и StackPanel.

...