que - visual studio wpf
¿Cómo especificar unidades en unidades de diálogo en WPF? (1)
Estoy intentando descubrir cómo diseñar un diálogo simple en WPF usando las unidades de diálogo (DLU) adecuadas.
He llegado con un simple ejemplo, que corta directamente al problema:
Puede consultar las Directrices de Windows UX para ver de dónde vienen estas mediciones.
La versión corta es:
- dlu = unidad de diálogo
- dlu se basa en el tamaño de fuente (los elementos cambian con el tamaño de fuente del usuario )
- un dlu horizontal es diferente de un dlu vertical (los dlu no son cuadrados )
Esto viene de la definición de una unidad de diálogo: el personaje promedio es 8dlus high por 4dlus wide .
Georgia 14pt:
Si utiliza una fuente más pequeña (es decir, 8pt Tahoma versos 14pt Georgia), el dlus se hace más pequeño:
Segoe UI 9pt:
Nota : Notará que la resolución (es decir, ppp) no tiene ningún impacto en la discusión.
Podría intentar crear un Converter
que devuelva el valor multiplicado por lo que sea que su DLU sea
Por ejemplo, creé un MathConverter
(el código está aquí ) que te permite especificar algo así como
<Button Height="{Binding Source={x:Static local:Settings.VerticalDLU,
Converter={StaticResource MathConverter},
ConverterParameter=@VALUE*14}"
Width="{Binding Source={x:Static local:Settings.HorizontalDLU,
Converter={StaticResource MathConverter},
ConverterParameter=@VALUE*50}" />
Para facilitar la escritura y la lectura, puede crear una clase que herede de Binding y configurar las propiedades de enlace predeterminadas, de modo que todo lo que tiene que hacer es
<Button Height="{local:MyVDluBinding Source=14}"
Width="{local:MyHDluBinding Source=50}" />
Nunca he tratado de sobreescribir un enlace con los valores predeterminados para Converter
y ConverterParameter
, pero he sobrescrito un enlace con fines de validación, así que creo que es posible.
El ValidationBinding
que creé podría usarse como Text="{local:ValidationBinding MyProperty}"
y establecer automáticamente ValidatesOnDataError=True, ValidatesOnException=True, UpdateSourceTarget=PropertyChanged
en los enlaces.