我有這個 ComboBox 使用該MaterialDesignFilledComboBox樣式。
<ComboBox ItemsSource="{Binding SomeData}"
Style="{StaticResource MaterialDesignFilledComboBox}"
materialDesign:HintAssist.Hint="Some hint text"
</ComboBox>
materialDesign:HintAssist.Hint="Some hint text"注意財產的分配。
當我沒有在 ComboBox 的下拉選單中選擇一個專案時,該Hint屬性(“一些提示文本”)是 ComboBox 中唯一可見的文本。沒事兒。
在提示上方,有一個“未使用的空間”。
如果我在下拉選單中選擇一個專案,“未使用的空間”被 占據Hint并顯示“一些提示文本”。
問題
當下拉選單中沒有選擇任何專案時,我的設計師不喜歡“上方空間”。當沒有選擇專案時,是否可以在 ComboBox 中垂直
居中?Hint
我的發現
查看MaterialDesignFilledComboBox's 模板(MaterialDesignFloatingHintComboBoxTemplate)。
我在第SmartHint374 - 397 行找到了控制元件。這個控制元件似乎是提示的占位符。
如果我將此樣式作為資源添加到 ComboBox,我將對 ComboBox 中的SmartHint物件進行一些有限的控制。
例如:
<ComboBox ItemsSource="{Binding SomeData}"
Style="{StaticResource MaterialDesignFilledComboBox}"
materialDesign:HintAssist.Hint="Some hint text"
<ComboBox.Resources>
<Style TargetType="materialDesign:SmartHint">
<Setter Property="VirtualizingPanel.Visibility" Value="Collapsed" />
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="VerticalContentAlignment" Value="Center" />
</Style>
<ComboBox.Resources>
</ComboBox>
Visibility = Collapsed具有實際作業的二傳手。和屬性
的設定器不起作用。即使他們會作業,他們也不會給我我想要的確切結果,而是證明我可以通過某種方式控制控制元件的位置。VerticalAlignmentVerticalContentAlignment
有什么建議?
/BR
斯蒂夫
uj5u.com熱心網友回復:
嘗試將HintAssist.IsFloating附加屬性設定ComboBox為false:
<ComboBox ItemsSource="{Binding SomeData}"
Style="{StaticResource MaterialDesignFilledComboBox}"
materialDesign:HintAssist.IsFloating="False"
materialDesign:HintAssist.Hint="Some hint text" />
您可以根據是否使用 a 選擇專案有條件地設定它Style:
<ComboBox ItemsSource="{Binding SomeData}" materialDesign:HintAssist.Hint="Some hint text">
<ComboBox.Style>
<Style TargetType="ComboBox" BasedOn="{StaticResource MaterialDesignFilledComboBox}">
<Setter Property="materialDesign:HintAssist.IsFloating" Value="True" />
<Style.Triggers>
<Trigger Property="SelectedItem" Value="{x:Null}">
<Setter Property="materialDesign:HintAssist.IsFloating" Value="False" />
</Trigger>
</Style.Triggers>
</Style>
</ComboBox.Style>
</ComboBox>
感謝@mm8,我找到了部分解決此問題的方法...但是 ComboBox 的圖形存在問題當我選擇下拉選單中的第一項時,提示文本和文本選定的專案,將所有合并/破壞在一起,變成無法閱讀的混亂。
這是第三方控制的缺陷。
您可以通過處理SelectionChanged并以編程方式呼叫 的ApplyTemplate方法來解決它SmartHint:
private void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
ComboBox cmb = (ComboBox)sender;
HintAssist.SetIsFloating(cmb, cmb.SelectedItem != null);
SmartHint smartHint = FindVisualChild<SmartHint>(cmb);
if (smartHint != null)
{
smartHint.ApplyTemplate();
}
}
private static T FindVisualChild<T>(Visual visual) where T : Visual
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(visual); i )
{
Visual child = (Visual)VisualTreeHelper.GetChild(visual, i);
if (child != null)
{
T correctlyTyped = child as T;
if (correctlyTyped != null)
{
return correctlyTyped;
}
T descendent = FindVisualChild<T>(child);
if (descendent != null)
{
return descendent;
}
}
}
return null;
}
XAML:
<ComboBox ItemsSource="{Binding SomeData}"
SelectionChanged="OnSelectionChanged"
Style="{StaticResource MaterialDesignFilledComboBox}"
materialDesign:HintAssist.IsFloating="False"
materialDesign:HintAssist.Hint="Some hint text" />
uj5u.com熱心網友回復:
嘗試更改 Padding 屬性
<Setter Property="Padding" Value="0 -10 0 0" />
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/423094.html
標籤:
下一篇:如何在wpf中播放MP4?
