У меня нет ответа для обработки всего приложения в одном утверждении, но я смог централизовать ряд специфичных для пользовательского интерфейса параметров в общем базовом классе, а затем создать приложения, которые получены из этого базового классаи наследовать централизованные настройки.Я должен отметить, что есть некоторые дополнительные сантехника , которые необходимо добавить в базовый класс для поддержки MVVM, как показано ниже:
public class MyMainWindowBaseClass : Window, INotifyPropertyChanged
{
...whatever unrelated stuff you need in your class here...
private int m_toolTipDuration = 3000; // Default to 3 seconds
public int MyToolTipDuration
{
get { return m_toolTipDuration; }
set
{
if (m_toolTipDuration != value)
{
bool transition = (value == 0 || m_toolTipDuration == 0);
m_toolTipDuration = value;
NotifyPropertyChanged("MyToolTipDuration");
if (transition)
{
NotifyPropertyChanged("MyToolTipEnabled");
}
}
}
}
public bool MyToolTipEnabled
{
get { return (m_toolTipDuration > 0); }
}
public event PropertyChangedEventHandler PropertyChanged;
... whatever variables, properties, methods, etc., you need here...
///-----------------------------------------------------------------------------
/// <summary>
/// Fires property-changed event notification
/// </summary>
/// <param name="propertyName">The name of the property that changed</param>
///-----------------------------------------------------------------------------
public void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
Код XAML выглядит следующим образом:
<Button Command="{Binding StartCommand}"
Content="Start"
FontWeight="Bold"
Height="Auto"
HorizontalAlignment="Left"
Margin="20,40,0,0"
Name="ui_StartButton"
ToolTip="Click this button to begin processing."
ToolTipService.IsEnabled="{Binding RelativeSource={RelativeSource AncestorType=Window},Path=MyToolTipEnabled}"
ToolTipService.ShowDuration="{Binding RelativeSource={RelativeSource AncestorType=Window},Path=MyToolTipDuration}"
VerticalAlignment="Top"
Width="90"/>
С важными привязками, связанными с ToolTipService.IsEnabled и ToolTipService.ShowDuration .
Вы можете видеть, что если MyToolTipDuration установлен в ноль, MyToolTipEnabled вернет false, и это отключит всплывающую подсказку.В первой попытке я попытался просто установить MyToolTipDuration на ноль, не используя ToolTipService.IsEnabled = в сочетании со свойством MyToolTipEnabled , но все, что было выполнено, мигало,едва читаемые всплывающие подсказки, которые появляются и исчезают.
В целом, для меня это работало довольно хорошо (ymmv), хотя не так, как единственная настройка или один вызов, который бы обрабатывал все приложение и обходил необходимость в распределенииэти привязки к каждому элементу с всплывающей подсказкой, которую я хотел бы поддерживать возможностью отключения.Ну да ладно, когда в Риме ....
В любом случае, надеюсь, кто-то найдет это полезным.