Настройка состояния переключателя выключателя в wpf

Можно интерпретировать его буквально - указатель на указатель

8
задан sudarsanyes 7 October 2009 в 16:02
поделиться

3 ответа

Проблема заключается в том, что вы используете ресурсы изображения . Изображение в ваших ресурсах - это конкретный экземпляр элемента управления. Это может быть только в одном месте одновременно. Итак, если у вас есть более одного элемента в вашем списке ...

Это должно сработать для вас:

<Style x:Key="OnOffToggleImageStyle" TargetType="ToggleButton">
 <Style.Triggers>
   <Trigger Property="IsChecked" Value="True">
     <Setter Property="Content">
       <Setter.Value>
         <Image Source="C:\ON.jpg" />
       </Setter.Value>
     </Setter>
   </Trigger>
   <Trigger Property="IsChecked" Value="False">
     <Setter Property="Content">
       <Setter.Value>
         <Image Source="C:\OFF.jpg" />
       </Setter.Value>
     </Setter>
   </Trigger>
 </Style.Triggers>
</Style>

Обратите внимание, что вы можете повысить производительность этого, используя ImageSource для каждого файла изображения в ваши ресурсы, а затем ссылку на это в Изображение . Это фактически означает, что каждое изображение загружается с диска только один раз, а не 2 * N раз (где N - количество элементов в вашем списке).

10
ответ дан 5 December 2019 в 08:53
поделиться

Этот ответ поможет вам. Там я взял ToggleButton и стилизовал его так, чтобы он выглядел как ToggleButton в TreeView (часть + / - для раскрытия узлов сворачивания). Вам просто нужно изменить пути, которые рисуют знаки - и +, чтобы вместо этого отображались ваши изображения.

Здесь идет персонализированный для вас, просто поместите изображение с именем "on.jpg" и другое с именем "off.jpg" "в вашем каталоге C: \, и он должен работать, просто скопировав / вставив в ваше окно:

    <Window.Resources>
        <SolidColorBrush x:Key="GlyphBrush" Color="#444" />
        <ControlTemplate x:Key="toggleButtonTemplate" TargetType="ToggleButton">
            <Grid
                Width="15"
                Height="13"
                Background="Transparent">
                <Image x:Name="ExpandImage"
                      Source="C:\off.jpg"
                      HorizontalAlignment="Left" 
                      VerticalAlignment="Center" 
                      Margin="1,1,1,1" />                     
            </Grid>
            <ControlTemplate.Triggers>
                <Trigger Property="IsChecked"
                     Value="True">
                    <Setter Property="Source"
                      TargetName="ExpandImage"
                      Value="C:\on.jpg"/>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
        <Style x:Key="toggleButtonStyle" TargetType="ToggleButton">
            <Setter Property="Template" Value="{StaticResource toggleButtonTemplate}" />
        </Style>
    </Window.Resources>
    <Grid>
        <ToggleButton Style="{StaticResource toggleButtonStyle}" />
    </Grid>
5
ответ дан 5 December 2019 в 08:53
поделиться

Как у Дрю Ноукс сказал, что в моем фрагменте было только два изображения. Так что только два элемента работали правильно. Я решил эту проблему с помощью следующего фрагмента.

<ToggleButton
    Grid.Row="0"  Grid.Column="2"  Grid.RowSpan="2"
    VerticalAlignment="Center" HorizontalAlignment="Center"
    IsChecked="{Binding Status}"
    Width="100" Height="35">
  <ToggleButton.Resources>
    <Image x:Key="OnImage" Source="C:\ON.jpg" />
    <Image x:Key="OffImage" Source="C:\OFF.jpg" />
  </ToggleButton.Resources>
  <ToggleButton.Style>
    <Style TargetType="ToggleButton">
      <Style.Triggers>
        <Trigger Property="IsChecked" Value="True">
          <Setter Property="Content" Value="{StaticResource OnImage}">
          </Setter>
        </Trigger>
        <Trigger Property="IsChecked" Value="False">
          <Setter Property="Content" Value="{StaticResource OffImage}">
          </Setter>
        </Trigger>
      </Style.Triggers>
    </Style>
  </ToggleButton.Style>
</ToggleButton>

Все просто: я перенес триггеры в шаблон данных. Не знаю, правильный ли ты ответ ». Кажется, работает

1
ответ дан 5 December 2019 в 08:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: