我有一個用戶控制元件,我將該控制元件的工具提示系結到某個物件的屬性中
<usercontrols:ucButton x:Name="xSaveCurrentBtn" ButtonType="ImageButton" ButtonFontImageSize="16" ButtonImageWidth="18" ButtonImageHeight="18" ButtonImageType="Save" Click="xSaveSelectedButton_Click" ButtonStyle="{StaticResource $ImageButtonStyle_Menu}" DockPanel.Dock="Right" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0,0,0,0">
<usercontrols:ucButton.ToolTip>
<ToolTip Content="{Binding ItemName, Mode=OneWay}" ContentStringFormat="Save {0}"/>
</usercontrols:ucButton.ToolTip>
</usercontrols:ucButton>
從代碼中我將 ucButton 的資料背景關系設定為我的物件:
xSaveCurrentBtn.DataContext = WorkSpace.Instance.CurrentSelectedItem;
有時 CurrentSelectedItem 為空,如果是這種情況,我希望工具提示顯示“未選擇專案”,我嘗試這樣做:
xSaveCurrentBtn.Tooltip = "No Item Selected";
但是當 CurrentSelectedItem 不為 null 并且我將 xSaveBtn.DataContext 重置為該物件時,我仍然看到 No Item Selected 工具提示,就好像我的 WPF 工具提示部分被覆寫并且它不再系結到資料背景關系 ItemName 屬性
uj5u.com熱心網友回復:
您正試圖同時將一個屬性設定為兩個值。不可能。您在 XAML 中所做的等同于:
xSaveCurrentBtn.Tooltip = new ToolTip() {.....};
當您將字串值設定為同一屬性時,先前的值將丟失。如果您不先保存它,則無法恢復它。
如果出現系結錯誤,您可能希望分配一個值:
<ToolTip Content="{Binding ItemName,
Mode=OneWay,
FallbackValue='No Item Selected'}"
ContentStringFormat="Save {0}"/>
如何在不顯式設定的情況下系結資料背景關系以更新為新的 CurrentSelectedItem?
假設 ?WorkSpace.Instance? 是一個回傳 ?WorkSpace? 實體的不可變屬性,而 ?CurrentSelectedItem? 是一個帶有 ?INotifyPropertyChanged.PropertyChanged? 通知的屬性,那么您可以這樣做:
<usercontrols:ucButton DataContext="{Binding CurrentSelectedItem, Source={x:Static viewmodels:WorkSpace.Instance}}" ...>
?viewmodels? 前綴取決于宣告 ?WorkSpace? 類的程式集和命名空間。
uj5u.com熱心網友回復:
您可以將 ContentTemplate 與 TextBlock 一起使用,這將使用 StringFormat 或 TargetNullValue,具體取決于 ItemName 是null:
<usercontrols:ucButton.ToolTip>
<ToolTip Content="{Binding ItemName}">
<ToolTip.ContentTemplate>
<DataTemplate>
<TextBlock Text="{Binding StringFormat='Save {0}',
TargetNullValue='No Item Selected'}"/>
</DataTemplate>
</ToolTip.ContentTemplate>
</ToolTip>
</usercontrols:ucButton.ToolTip>
或者如果您以不同方式系結 Tooltip.Content:
<usercontrols:ucButton.ToolTip>
<ToolTip Content="{Binding}">
<ToolTip.ContentTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=ItemName,
StringFormat='Save {0}',
FallbackValue='No Item Selected'}"/>
</DataTemplate>
</ToolTip.ContentTemplate>
</ToolTip>
</usercontrols:ucButton.ToolTip>
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/535119.html
標籤:C#wpf
