WPF MVVM Кнопка переключения Canvas с DataTriggers - PullRequest
0 голосов
/ 30 января 2019

Я хотел бы заменить изображения в формате png на значки холста XAML.Выглядит лучше, файлы поменьше, и я могу их настроить.После нажатия кнопки я передавал имя изображения модели вида и решал, какой значок отображается на кнопке.Либо открытый, либо закрытый замок.У меня есть какой-нибудь способ сделать это с помощью холста?CommandParamenter не имеет значения, если его можно различить.

<Button Background="Transparent" Width="24" Height="24" BorderBrush="{x:Null}" Command="{Binding LockCommand}" CommandParameter="{Binding ElementName=ButtonImage, Path=Source, UpdateSourceTrigger=PropertyChanged}">

<!-- OLD CODE START
<Image Name="ButtonImage" >
    <Image.Style>
        <Style TargetType="{x:Type Image}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Locked, UpdateSourceTrigger=PropertyChanged}" Value="True">
                    <Setter Property="Source" Value="Icons/png/24px/locked.png" />
                </DataTrigger>
                <DataTrigger Binding="{Binding Locked, UpdateSourceTrigger=PropertyChanged}" Value="False">
                    <Setter Property="Source" Value="Icons/png/24px/unlocked.png" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Image.Style>
</Image>
OLD CODE END -->

<!-- NEW CODE NOT WORKING -->
<Canvas Name="ButtonImage" >
    <Canvas.Style>
        <Style TargetType="{x:Type Canvas}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Locked, UpdateSourceTrigger=PropertyChanged}" Value="True" >
                    <Setter Property="Path.Data" Value="M12,17C10.89,17 10,16.1 10,15C10,13.89 10.89,13 12,13A2,2 0 0,1 14,15A2,2 0 0,1 12,17M18,20V10H6V20H18M18,8A2,2 0 0,1 20,10V20A2,2 0 0,1 18,22H6C4.89,22 4,21.1 4,20V10C4,8.89 4.89,8 6,8H7V6A5,5 0 0,1 12,1A5,5 0 0,1 17,6V8H18M12,3A3,3 0 0,0 9,6V8H15V6A3,3 0 0,0 12,3Z" />
                    <Setter Property="Path.Fill" Value="Black"></Setter>
                </DataTrigger>
                <DataTrigger Binding="{Binding Locked, UpdateSourceTrigger=PropertyChanged}" Value="False">
                    <Setter Property="Path.Data" Value="M18,20V10H6V20H18M18,8A2,2 0 0,1 20,10V20A2,2 0 0,1 18,22H6C4.89,22 4,21.1 4,20V10A2,2 0 0,1 6,8H15V6A3,3 0 0,0 12,3A3,3 0 0,0 9,6H7A5,5 0 0,1 12,1A5,5 0 0,1 17,6V8H18M12,17A2,2 0 0,1 10,15A2,2 0 0,1 12,13A2,2 0 0,1 14,15A2,2 0 0,1 12,17Z" />
                    <Setter Property="Path.Fill" Value="DimGray"></Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Canvas.Style>
</Canvas>

</Button>

Логика VIEW-MODEL

  public ICommand LockCommand
        {
            get
            {
                return _lockCommand ?? new CommandHandler(x =>
                {
                    if (x is null)
                    {
                        return;
                    }

                    string buttonType = x.ToString();


                    if (buttonType.EndsWith("unlocked.png"))
                    {
                        Locked = true;
                    }
                    else if (buttonType.EndsWith("locked.png"))
                    {
                        Locked = false;
                    }
                });
            }
        }
...