powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Единообразное задание размеров Font'а. В каком направлении рыть ?
25 сообщений из 25, страница 1 из 1
Единообразное задание размеров Font'а. В каком направлении рыть ?
    #38437585
WPF Падаван
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.
Я еще только изучаю WPF. Не серчайте.

В каком направлении рыть, чтобы иметь возможность задать настройки для шрифтов для всех форм приложения?
Вроде бы WPF этим и славится.

Подскажите пожалуйста технические детали. Точнее направление.

Наверное я когда то и сам найду этот ответ, но тестовые приложения пишу уже сейчас и соответственно возникают вопросы. Подскажите куда рыть, и какие темы читать, а дальше уж я сам.
...
Рейтинг: 0 / 0
Единообразное задание размеров Font'а. В каком направлении рыть ?
    #38437630
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Единообразное задание размеров Font'а. В каком направлении рыть ?
    #38438529
Фотография Шайтан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
готовые темы есть тут
...
Рейтинг: 0 / 0
Единообразное задание размеров Font'а. В каком направлении рыть ?
    #38438963
WPF Падаван
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответ. Буду разбираться.

И особенно за готовые темы. У меня нету дизайнерской жилки :)
...
Рейтинг: 0 / 0
Единообразное задание размеров Font'а. В каком направлении рыть ?
    #38447496
WPF Падаван
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Почитал про Стили и Шаблоны.

Появился новый вопрос. Как подцепить в стиль параметры, чтобы они из БД считывались ?
Почему то

Ну, т.е. мне нужно, чтобы параметры считывались из некоего объекта. А уж в нем у меня будут хранится параметры, считанные заранее из БД (чтобы все параметры разом считать, а не бегать за каждым свойством в БД).

Мне кажется, тут проглядывают биндинги, но не уверен. Я еще не совсем осознал всей глубины свойств зависимости, но буду стараться (в свободное время ;) )

Можете показать краткий код, или подсказать чего почитать в этом направлении ? Хотелось бы какой то пример, как это правильно делается, увидеть, а то я наизобретаю велосипедов.
...
Рейтинг: 0 / 0
Единообразное задание размеров Font'а. В каком направлении рыть ?
    #38447610
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WPF Падаван,

вопрос, конечно, интересный... "тут проглядывают биндинги" - да, если я правильно понял вопрос.
Наверное самый простой путь - задействовать конвертер:
но такой подход требует чрезмерной (по нынешним временам) аккуратности :)
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
    public class StyleParametersConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return StyleParametersConverter.GetValue(parameter as string);
        }
        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return value;
        }
        static Dictionary<string, object> _parameters = new Dictionary<string, object>();
        static StyleParametersConverter()
        {
            // здесь нужно обеспечить "целостность данных"
            // т.е., например, если что-то по каким-то причинам не загрузилось из БД - должны быть добавлены значения по-умолчанию
            _parameters.Add("Button_FontSize", 14);
            _parameters.Add("Button_FontWeight", FontWeights.Bold);
            _parameters.Add("Button_Foreground", Colors.Coral);
            _parameters.Add("TextBlock_Style1_FontSize", 17);
            _parameters.Add("TextBlock_Style1_FontStyle", FontStyles.Italic);
        }
        public static object GetValue(string param_name)
        {
            if (_parameters.ContainsKey(param_name))
                return _parameters[param_name];
            return null;
        }
    }


Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
        <app:StyleParametersConverter x:Key="StyleParametersConverter" />
        <Style TargetType="Button">
            <Setter Property="FontSize" Value="{Binding Converter={StaticResource StyleParametersConverter}, ConverterParameter=Button_FontSize}"/>
            <Setter Property="FontWeight" Value="{Binding Converter={StaticResource StyleParametersConverter}, ConverterParameter=Button_FontWeight}"/>
            <Setter Property="Foreground" Value="{Binding Converter={StaticResource StyleParametersConverter}, ConverterParameter=Button_Foreground}"/>
        </Style>
        <Style x:Key="TextBlockStyle1" TargetType="TextBlock">
            <Setter Property="FontSize" Value="{Binding Converter={StaticResource StyleParametersConverter}, ConverterParameter=TextBlock_Style1_FontSize}"/>
            <Setter Property="FontStyle" Value="{Binding Converter={StaticResource StyleParametersConverter}, ConverterParameter=TextBlock_Style1_FontStyle}"/>
        </Style>

...
Рейтинг: 0 / 0
Единообразное задание размеров Font'а. В каком направлении рыть ?
    #38447617
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_parameters.Add("Button_Foreground", ColorsBrushes.Coral);
...
Рейтинг: 0 / 0
Единообразное задание размеров Font'а. В каком направлении рыть ?
    #38448406
WPF Падаван
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так, что в "великом, могучем, современном, высшем достижении мысли опытных архитекторов, то, что вытеснить устаревшие ВинФормы на свалку истории" WPF не предусмотрели такой мелочишки ?

А как же все эти рассказы в книгах, о том, что WPF расчитан на динамическую отрисовку аки Интернет страничка ? Где же вся эта великая гибкость, если такие мелочи, как размеры шрифта, нужно намертво зашивать в код формы ?

:)

Простой пример. Я хочу пользователю предоставить возможность чуть чуть настроить то, что он видит на экране. Т.е. предоставить возможность залезть в настройки и увеличить размер шрифта.
Могу я это сделать в стандартных WinForms ? Конечно могу. На счет раз !

Могу я это сделать в WPF ? Нет ? Вы серьезно ? ( это удивленное восклицание направленно в сторону разработчиков WPF )

Что то тут не сходится.
...
Рейтинг: 0 / 0
Единообразное задание размеров Font'а. В каком направлении рыть ?
    #38448411
WPF Падаван
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не верится что архитекторы WPF продумали много интересных вещей, типа анимаций, переработали систему свойств, ввели пузырькование и туннелирование, но не предусмотрели что кто то может пожелать изменить размер шрифтика "на лету".
...
Рейтинг: 0 / 0
Единообразное задание размеров Font'а. В каком направлении рыть ?
    #38448450
WPF Падаван
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LR,
Спасибо за пример.
...
Рейтинг: 0 / 0
Единообразное задание размеров Font'а. В каком направлении рыть ?
    #38448454
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WPF Падаван,

непонятно чего Вы хотите. Хотите разобраться в WPF - так разбирайтесь. Хотите получить помощь на форуме по какому-либо вопросу - формулируйте этот вопрос так, чтобы другим было понятно.

P.S. По последнему вопросу (не совсем понятному), возможно следует ознакомиться с DynamicResource
...
Рейтинг: 0 / 0
Единообразное задание размеров Font'а. В каком направлении рыть ?
    #38449031
WPF Падаван
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LR,

По поводу непонятности вопроса:
Нужно как то сделать такое

Код: c#
1.
2.
3.
<Label Padding="MyConfig.GetLabelPadding" Margin="MyConfig.GetLabelMargin">
  Text
</Label>



MyConfig - это видимо будет статический класс, вроде бы требование такое в WPF.

Как это реализовать ? В куче примеров и учебников написано лишь как биндить визуальные компоненты форм между собой.
А мне нужно чтобы часть свойств не намертво зашивалось в коде, а могла быть считанной один раз при загрузке программы.

Можете подсказать как это сделать ?
...
Рейтинг: 0 / 0
Единообразное задание размеров Font'а. В каком направлении рыть ?
    #38449039
Фотография Абсолют
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WPF Падаван,


WPF ПадаванВ куче примеров и учебников написано лишь как биндить визуальные компоненты форм между собой.
В этой куче примеров и учебников не разу не упоминалось об DataContext ?
...
Рейтинг: 0 / 0
Единообразное задание размеров Font'а. В каком направлении рыть ?
    #38449043
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WPF Падаван,

А в чем проблема-то?!? Читайте свои настройки хоть через http, создавайте класс VM и привязывайте размер фонта к одному из полей. И всё.
...
Рейтинг: 0 / 0
Единообразное задание размеров Font'а. В каком направлении рыть ?
    #38449048
WPF Падаван
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Monochromatique,

Подскажите пожалуйста как это делается ?


А пока почитаю про ДатаКонтекст. Не припомню, чтобы о нем видел упоминания.

Вот сайт по которому изучаю WPF
http://professorweb.ru/my/WPF/base_WPF/level1/info_WPF.php
...
Рейтинг: 0 / 0
Единообразное задание размеров Font'а. В каком направлении рыть ?
    #38449056
Фотография Абсолют
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Банальный и самый простой пример:

Это типа, VM (ViewModel):
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
    internal sealed class MyFirstViewModel : BaseViewModel /* Базовая view model, которая наследует и имплементит INotifyPropertyChanged, метод OnChange там */
    {
        private double _buttonWidth;

        public double ButtonWidth
        {
            get
            {
                return _buttonWidth;
            }

            set
            {
                _buttonWidth = value;

                OnChange("ButtonWidth");
            }
        }
    }



Далее, где либо, инитите это все в DataContext желаемого, к примеру к главному окну, где лежит одна кнопка:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
     /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {


        /// <summary>
        /// Initializes a new instance of the <see cref="MainWindow"/> class.
        /// </summary>
        public MainWindow()
        {
             this.DataContext = new MyFirstViewModel();




И уже в XAML этого главного окна творите такое:

Код: xml
1.
<Button Margin="5,5,5,5" Width="{Binding ButtonWidth, Mode=TwoWay}"....



Об интерфейсе INotifyPropertyChanged читать тут .
...
Рейтинг: 0 / 0
Единообразное задание размеров Font'а. В каком направлении рыть ?
    #38449075
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WPF ПадаванНужно как то сделать такое

Код: c#
1.
2.
3.
<Label Padding="MyConfig.GetLabelPadding" Margin="MyConfig.GetLabelMargin">
  Text
</Label>



MyConfig - это видимо будет статический класс, вроде бы требование такое в WPF.
требования такого вроде бы нет в WPF, но сделать такое несложно:
Код: c#
1.
2.
3.
4.
5.
    public static class MyConfig
    {
        public static Thickness LabelPadding { get { return new Thickness(10); } }
        public static Thickness LabelMargin { get { return new Thickness(10); } }
    }


Код: xml
1.
2.
3.
4.
5.
xmlns:my="clr-namespace:WpfApplication1"
...
<Label Padding="{Binding Source={x:Static Member=my:MyConfig.LabelPadding}}" Margin="{Binding Source={x:Static Member=my:MyConfig.LabelMargin}}">
     Text
</Label>
...
Рейтинг: 0 / 0
Единообразное задание размеров Font'а. В каком направлении рыть ?
    #38449187
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WPF ПадаванА мне нужно чтобы часть свойств не намертво зашивалось в коде, а могла быть считанной один раз при загрузке программы.если все же захочется
WPF Падаванизменить размер шрифтика "на лету"то, ввиду того, что статический класс не может ни поддерживать интерфейс (INotifyPropertyChanged) ни наследовать DependencyObject, логично реализовать соответствующий синглетон.
Выше уже упоминали INotifyPropertyChanged, поэтому приведу вариант с традиционной альтернативой, с которой Вам также неизбежно придется ознакомиться -
DependencyProperty
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
    public sealed class MyConfig : DependencyObject
    {
        static readonly MyConfig _instance = new MyConfig();
        public static MyConfig Instance { get { return _instance; } }

        public static readonly DependencyProperty LabelPaddingProperty = DependencyProperty.Register("LabelPadding", typeof(Thickness), typeof(MyConfig), new UIPropertyMetadata(new Thickness(10)));
        public Thickness LabelPadding { get { return (Thickness)this.GetValue(LabelPaddingProperty); } set { this.SetValue(LabelPaddingProperty, value); } }

        public static readonly DependencyProperty LabelMarginProperty = DependencyProperty.Register("LabelMargin", typeof(Thickness), typeof(MyConfig), new UIPropertyMetadata(new Thickness(10)));
        public Thickness LabelMargin { get { return (Thickness)this.GetValue(LabelMarginProperty); } set { this.SetValue(LabelMarginProperty, value); } }

        public static readonly DependencyProperty LabelFontSizeProperty = DependencyProperty.Register("LabelFontSize", typeof(double), typeof(MyConfig), new UIPropertyMetadata(14.0));
        public double LabelFontSize { get { return (double)this.GetValue(LabelFontSizeProperty); } set { this.SetValue(LabelFontSizeProperty, value); } }
    }


Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
<xxx.Resources>
    <x:Static Member="my:MyConfig.Instance" x:Key="myConfig" />
</xxx.Resources>
...
<Label Padding="{Binding Source={StaticResource myConfig}, Path=LabelPadding}" Margin="{Binding Source={StaticResource myConfig}, Path=LabelMargin}"
        FontSize="{Binding Source={StaticResource myConfig}, Path=LabelFontSize}">
    Text
</Label>


меняем размер шрифтика "на лету"
Код: c#
1.
2.
3.
4.
5.
private void Button_Click(object sender, RoutedEventArgs e)
{
    MyConfig.Instance.LabelPadding = MyConfig.Instance.LabelMargin = MyConfig.Instance.LabelPadding.Left > 5 ? new Thickness(5) : new Thickness(10);
    MyConfig.Instance.LabelFontSize += MyConfig.Instance.LabelFontSize < 14 ? 4 : -4;
}


...
Рейтинг: 0 / 0
Единообразное задание размеров Font'а. В каком направлении рыть ?
    #38449214
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WPF ПадаванМогу я это сделать в WPF ? Нет ? Вы серьезно ? ( это удивленное восклицание направленно в сторону разработчиков WPF )
Данный форум - не круглосуточный саппорт всех новичков; если вам не был дан ответ здесь, то это не значит, что его не существует вообще. Возможно, людям было просто лень отвечать на такой [простой] вопрос. И не стоит свое незнание чего-либо превращать в удивленные восклицания в сторону разработчиков. Исходите в первую очередь из того, что вы просто не знакомы с предметной областью.
Про DynamicResourceExtension выше уже упоминали. Пример с ним:
Разметка:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
<Window.Resources>
  <System:Double x:Key="CommonFontSize">11</System:Double>
</Window.Resources>
<Grid>
  <Grid.RowDefinitions>
    <RowDefinition/>
    <RowDefinition/>
    <RowDefinition/>
  </Grid.RowDefinitions>
  <Label
    HorizontalAlignment="Center"
    VerticalAlignment="Center"
    Content="Label"
    FontSize="{DynamicResource CommonFontSize}"/>
  <TextBox
    Grid.Row="1"
    HorizontalAlignment="Center"
    VerticalAlignment="Center"
    Text="TextBox"
    FontSize="{DynamicResource CommonFontSize}"/>
  <Button
    Grid.Row="2"
    Content="Button"
    Margin="10"
    Padding="5"
    HorizontalAlignment="Center"
    VerticalAlignment="Center"
    Click="ButtonClick"
    FontSize="{DynamicResource CommonFontSize}"/>
</Grid>


Code-behind:
Код: c#
1.
2.
3.
4.
private void ButtonClick(object sender, RoutedEventArgs e)
{
  Resources["CommonFontSize"] = 16.0;
}
...
Рейтинг: 0 / 0
Единообразное задание размеров Font'а. В каком направлении рыть ?
    #38450486
WPF Падаван
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо Вам обитатели Земли, что раскрыли свои самые секретные знания, защищающие жизнь на планете !
Мухахаха. Теперь, зная эти сверхсекретные данные, мы сможем захватить вашу планету !
...
Рейтинг: 0 / 0
Единообразное задание размеров Font'а. В каком направлении рыть ?
    #38450487
WPF Падаван
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ой. Упс.

Я хотел сказать - спасибо Вам, что подсказали целую кучу вариантов решение задачи.
Нужно все обдумать и понять как работает, и выбрать оптимальный вариант.
...
Рейтинг: 0 / 0
Единообразное задание размеров Font'а. В каком направлении рыть ?
    #38456594
WPF Падаван
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите пожалуйста.
Проблема с настройкой биндинга.

Решил сделать так, как предложил уважаемый LR.

Получилось только частично. Помогите пожалуйста понять в чем проблема.
Вот код

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
namespace AppSpace
{
    public class Params
    {
        int FontSize
        { get { return 20; } }
    }

    public static class TestConfig
    {
        public static int FontSize
        {
            get
            {
                return 50;
            }
        }

        public static Params ConfigParams
        {
            get
            {
                return new Params ();
            }
        }        
    }
}


Вот так работает:

xmlns:ApSpace="clr-namespace:AppSpace" 

<Style x:Key="FormCaptionStyle">
            <Setter Property="TextBox.FontSize" Value="{Binding Source={x:Static Member=ApSpace:TestConfig.FontSize}}"/>

А вот так нет:

<Style x:Key="FormCaptionStyle">
            <Setter Property="TextBox.FontSize" Value="{Binding Source={x:Static Member=ApSpace:TestConfig}, Path=ConfigParams.FontSize}"/>
....




Мне нужно все же второй вариант, опять таки потому что параметры у меня не зашиты в код, а считываются отдельным классом (Param) из внешнего источника.

Подскажите в чем я ошибся. Вроде бы делаю по стандартному подходу Source Path - для чего не нужно, чтобы класс был DependencyProperty (не хочется мне править свой класс Param, наследуя от DependencyProperty)
...
Рейтинг: 0 / 0
Единообразное задание размеров Font'а. В каком направлении рыть ?
    #38456845
WPF Падаван
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть идеи, как нужно правильно реализовать ? )
...
Рейтинг: 0 / 0
Единообразное задание размеров Font'а. В каком направлении рыть ?
    #38456953
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) public int FontSize { get { return 20; } }
2) {Binding Source={x:Static Member=ApSpace:TestConfig.ConfigParams}, Path=FontSize} (хотя в FW 4.5 вроде уже можно привязаться к статическому свойству)
3) взирая на
Код: c#
1.
2.
3.
4.
5.
6.
7.
        public static Params ConfigParams
        {
            get
            {
                return new Params (); // эту внеземную логику
            }
        }        

"обитатели Земли" могут спокойно продолжать делиться с захватчиками любыми секретами
...
Рейтинг: 0 / 0
Единообразное задание размеров Font'а. В каком направлении рыть ?
    #38457043
WPF Падаван
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LR,

Код: c#
1.
return new Params (); // эту внеземную логику


Эм. У меня там идет обращение к классу, который и занимается считыванием и хранением конфигурационных параметров.
Я просто для упрощения кода не стал вставлять что то сложное - чтобы сконцентрировать код вокруг интересующего момента.

Суть примера в том, чтобы показать что свойство возвращает ОБЪЕКТ а не простой тип !
И уже в стиле FormCaptionStyle я хотел как раз подцепится к свойству класса Params. В этом суть.


Трепещите обитатели 4 3 планеты от звезды, которую вы зовете Соунцээ. Мы учимся, и уже не так просты как вам кажется.
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Единообразное задание размеров Font'а. В каком направлении рыть ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]