Как изменить значок кнопки с триггером данных?МОФ - PullRequest
0 голосов
/ 23 ноября 2018

Я новичок в wpf.На самом деле я хочу изменить значок кнопки (play.ico / stop.ico).когда я нажимаю кнопку, он меняет статус (статус - столбец базы данных) на значение «В сети» или «Не в сети».Он также обновляется в базе данных, но я хочу показать, когда статус в сети, кнопка должна показывать stop.ico, а когда мой статус в автономном режиме, кнопка должна показывать play.ico.Как этого добиться?Я попытался с кодом ниже, но это не работает.Пожалуйста, помогите и подскажите, что мне чего-то не хватает.

// Xaml code

<StackPanel Margin="0 0 0 0" Grid.Column="5"  Grid.Row="0" Grid.RowSpan="2">
                    <Button Name="Ignition_Button1" Click="Ignition_Button1_Click_1" Width="35" Height="35" Margin="16,5,16,0"

                            Style="{DynamicResource CircleButton}"
                            Command="{Binding StartStopCommand}">
                        <Button.ToolTip>
                            <ToolTip>
                                <StackPanel>
                                    <TextBlock FontWeight="Bold"
                                               Text="Start or Stop Control Center" />
                                </StackPanel>
                            </ToolTip>
                        </Button.ToolTip>
                        <StackPanel Orientation="Vertical">
                            <Rectangle Width="15" Height="15" StrokeThickness="0">
                                <Rectangle.Style>
                                    <Style TargetType="{x:Type Rectangle}">
                                        <Setter Property="Fill" Value="{StaticResource play.ico}" />
                                        <Style.Triggers>
                                            <DataTrigger Binding="{Binding Status, UpdateSourceTrigger=PropertyChanged}" Value="Online">
                                                <Setter Property="Fill" Value="{StaticResource stop.ico }" />
                                            </DataTrigger>
                                            <DataTrigger Binding="{Binding Status, UpdateSourceTrigger=PropertyChanged}" Value="Offline">
                                                <Setter Property="Fill" Value="{StaticResource play.ico}" />
                                            </DataTrigger>
                                        </Style.Triggers>
                                    </Style>
                                </Rectangle.Style>
                            </Rectangle>
                        </StackPanel>
                    </Button>
                </StackPanel>

1 Ответ

0 голосов
/ 23 ноября 2018

Несколько вещей, которые я бы предложил здесь.Вместо ico, которые являются растровыми и будут иметь неровности, я бы порекомендовал геометрию и пути.С кнопкой, состоящей из двух состояний, вы можете переключаться между ними, тогда кнопка переключения является хорошим кандидатом.Ниже я помещаю свои две геометрии в ресурсы моей кнопки переключения.Они чаще всего помещаются в словарь ресурсов (наряду со многими другими геометриями, используемыми для иконографии) и объединяются в app.xaml.

        <ToggleButton IsChecked="True"
                      IsThreeState="False"
                      >
            <ToggleButton.Resources>
                <Geometry x:Key="StopGeom">
                    M0,0L32,0 32,32 0,32z
                </Geometry>
                <Geometry x:Key="PlayGeom">
                    M0,0L16,8 32,16 16,24 0,32 0,16z
                </Geometry>
            </ToggleButton.Resources>
            <Path Fill="Black"
                  Stretch="Uniform"
                  Margin="4">
                <Path.Style>
                    <Style TargetType="Path">
                        <Setter Property="Data" Value="{StaticResource PlayGeom}"/>
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding IsChecked, RelativeSource={RelativeSource AncestorType={x:Type ToggleButton}}}" Value="True">
                                <Setter Property="Data" Value="{StaticResource StopGeom}"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </Path.Style>
            </Path>
        </ToggleButton>

Это требует дополнительной работы, но должно дать вам идею одного способасделай это.Для получения дополнительной информации о макете и геометрии:

https://social.technet.microsoft.com/wiki/contents/articles/32610.wpf-layout-lab.aspx

Я не знаю, как вы стилизуете форму своей кнопки, но я использую ее, чтобы подчеркнуть, что новички wpf выглядят безразличноСредства управления:

https://social.technet.microsoft.com/wiki/contents/articles/29866.aspx

...