Можно интерпретировать его буквально - указатель на указатель
Проблема заключается в том, что вы используете ресурсы изображения
. Изображение
в ваших ресурсах - это конкретный экземпляр элемента управления. Это может быть только в одном месте одновременно. Итак, если у вас есть более одного элемента в вашем списке ...
Это должно сработать для вас:
<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 - количество элементов в вашем списке).
Этот ответ поможет вам. Там я взял 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>
Как у Дрю Ноукс сказал, что в моем фрагменте было только два изображения. Так что только два элемента работали правильно. Я решил эту проблему с помощью следующего фрагмента.
<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>
Все просто: я перенес триггеры в шаблон данных. Не знаю, правильный ли ты ответ ». Кажется, работает