我ToggleButton定義了一個共享樣式,它在 is 時顯示一個影像,在IsCheckedis時顯示一個true不同的影像。系結到 ViewModel 上的布爾屬性可以很好地顯示所需的影像,所以我知道我的樣式正在被應用并且系結到作業。IsCheckedfalseIsCheckedDataTriggerIsChecked
我想在更改ToolTip時更改文本IsChecked,但我在讓它作業時遇到了很多麻煩。理想情況下,我想ToolTip在未選中時說“打開”,在選中時說“關閉”。
問題是ToolTip沒有連接到ToggleButton可視樹中的 ,所以我需要另一種方法來找到ToggleButton.IsChecked. 我試圖完全以一種風格來做這件事,因為我有很多這些按鈕分散在周圍,所以不允許對 VM 進行任何更改。
理想情況下,該解決方案將允許我使用ToggleButton.Tag來存盤文本,并應用一個Converter和StringFormat(或ContentStringFormat)。我已經覆寫ContentTemplate并用準系統替換它以ContentPresenter擺脫典型ToggleButton效果,因此如有必要可以進一步更改。(也許我已經洗掉了一些重要的東西來讓它作業?idk。)
這是我的風格,可以改變形象,但ToolTip永遠不會改變。
<!--Toggle button where content is a switch image that's "On" when checked and "Off" when anything else-->
<Style TargetType="ToggleButton" x:Key="OnOffToggleButton" x:Shared="False">
<!-- this worked to format the initial tooltip contents, but no way to bind.
<Style.Resources>
<Style TargetType="ToolTip">
<Setter Property="ContentStringFormat" Value="Turn on {0}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ???}" Value="True">
<Setter Property="ContentStringFormat" Value="Turn off {0}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Style.Resources> -->
<Setter Property="Content" Value="{StaticResource ToggleOffImage}"/>
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToggleButton">
<ContentPresenter>
<ContentPresenter.ToolTip>
<TextBlock>
<TextBlock.Style>
<Style TargetType="TextBlock">
<!-- this works -->
<Setter Property="Text" Value="{Binding Tag, RelativeSource={RelativeSource Self}, StringFormat=Turn on {0}}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsChecked}" Value="True">
<!-- trigger has no effect -->
<Setter Property="Text" Value="{Binding Tag, RelativeSource={RelativeSource Self}, StringFormat=Turn off {0}}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</ContentPresenter.ToolTip>
</ContentPresenter>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding IsChecked, RelativeSource={RelativeSource Self}}" Value="True">
<Setter Property="Content" Value="{StaticResource ToggleOnImage}"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="ToolTip">
<Setter.Value>
<!-- another thing that does not work -->
<TextBlock Text="{Binding Tag, RelativeSource={RelativeSource Self}, StringFormat=Turn off {0}}" />
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
按鈕本身的定義類似于:
<ToggleButton Style="{StaticResource OnOffToggleButton}"
IsChecked="{Binding IsPoweredOn, Mode=OneWay}"
Command="{Binding TogglePowerCommand}"
Tag="Device Power"/>
uj5u.com熱心網友回復:
StringFormat不適用于 a ToolTip,因為它可以包含 type 的任意內容,object而不僅僅是純文本。但是,ToolTip公開了ContentStringFormat您可以使用的屬性。
獲取或設定一個組合,該組合指定在屬性顯示為 時
string如何設定其格式。Contentstring
由于 aToolTip托管在單獨的彈出視窗中,因此它與 不屬于同一可視樹的一部分,但您可以使用的ToggleButton來參考它。PlacementTargetToolTip
獲取或設定打開時的
UIElement相對ToolTip位置。
<Style TargetType="ToggleButton" x:Key="OnOffToggleButton" x:Shared="False">
<Setter Property="Content" Value="{StaticResource ToggleOffImage}"/>
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="ToolTip">
<Setter.Value>
<ToolTip Content="{Binding PlacementTarget.Tag, RelativeSource={RelativeSource Self}}"
ContentStringFormat="Turn on {0}">
</ToolTip>
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToggleButton">
<ContentPresenter/>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding IsChecked, RelativeSource={RelativeSource Self}}" Value="True">
<Setter Property="Content" Value="{StaticResource ToggleOnImage}"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="ToolTip">
<Setter.Value>
<ToolTip Content="{Binding PlacementTarget.Tag, RelativeSource={RelativeSource Self}}"
ContentStringFormat="Turn off {0}">
</ToolTip>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
轉換器仍然可以Content像往常一樣在系結中應用。
<ToolTip Content="{Binding PlacementTarget.Tag, RelativeSource={RelativeSource Self}, Converter={StaticResource YourConverter}}"
ContentStringFormat="Turn on {0}">
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/456545.html
