簡體   English   中英

在樣式中使用自定義依賴屬性

[英]Using custom dependency property in style

我有一個帶有自定義屬性IsPlaying的自定義按鈕控件。

internal class PlayPauseButton : Button
{
    public bool IsPlaying
    {
        get => (bool)GetValue(IsPlayingProperty);
        set => SetValue(IsPlayingProperty, value);
    }

    public readonly static DependencyProperty IsPlayingProperty = DependencyProperty.Register(
        nameof(IsPlaying), typeof(bool), typeof(PlayPauseButton), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
}

我想從它的樣式綁定到該屬性。 我想顯示取決於IsPlaying標志值的不同圖像。

<Style TargetType="c:PlayPauseButton">
    <Setter Property="IsPlaying" Value="False"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate>
                <Grid>
                    <Image Width="100" Height="100" Visibility="{TemplateBinding IsPlaying, Converter={c:InverseBoolToVisibilityConverter}}">
                        ...
                    </Image>
                    <Image Width="100" Height="100" Visibility="{TemplateBinding IsPlaying, Converter={c:BoolToVisibilityConverter}}">
                        ...
                    </Image>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

我使用這樣的控件:

<c:PlayPauseButton Width="200" Height="100" IsPlaying="{Binding Player.IsPlaying}"/>

但是我的風格有問題。 我無法綁定到IsPlaying屬性。 您可以看到以下錯誤消息:

“無法根據文本‘IsPlaying’創建‘DependencyProperty’:行號‘10’和行位置‘75’。”

您必須指定ControlTemplateTargetType ,否則無法在TemplateBinding中解析該屬性。

ControlTemplate TargetType="c:PlayPauseButton">

另一種方法是使用相對源綁定模板化的 parent

<ControlTemplate>
   <Grid>
      <Image Width="100" Height="100" Visibility="{Binding IsPlaying, RelativeSource={RelativeSource TemplatedParent}, Converter={c:InverseBoolToVisibilityConverter}}">
          <!-- ... -->
      </Image>
      <Image Width="100" Height="100" Visibility="{Binding IsPlaying, RelativeSource={RelativeSource TemplatedParent}, Converter={c:BoolToVisibilityConverter}}">
          <!-- ... -->
      </Image>
   </Grid>
</ControlTemplate>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM