Форум программистов, компьютерный форум, киберфорум
Наши страницы

C#: WPF, UWP и Silverlight

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
винс
41 / 41 / 4
Регистрация: 16.03.2012
Сообщений: 199
#1

Изменение стандартного шаблона TextBox - C# WPF

12.06.2012, 00:32. Просмотров 1596. Ответов 1
Метки нет (Все метки)

Доброе время суток!) Хотелось обратиться с таким вот вопросом. Решил изменить стандартны шаблон TextBox, встроил в него CheckBox. Задача такая если CheckBox Checked то разрешить изменения текста в TextBox, ну и наоборот. Вот и появилась проблемка, как сделать так что бы при нажатии на CheckBox изменялось свойтво IsReadOnly только для того TextBox`а, в который встроен CheckBox. Я конечно могу в коде обратиться по имени к CheckBox и изменить напрямую (тоже по имени) TextBox. Но вот проблема, если это шаблон то имена будут одинаковые во всех таких TextBox, по этому такое не пройдет. Думаю может есть функция которая обращается не по имени, а к TextBox который является отцом.

Есть еще вариант, но я с трудом понимаю как его сделать. Вообщем сделать Binding на свойство IsReadOnly, что бы оно зависело от состояния CheckBox, который встроен в данный TextBox.

Надеюсь хоть что-то поймете

Добавлено через 36 минут
Ну вот пример для Binding, он работает но с отдельным CheckBox. А мне надо что бы она обращался к CheckBox который внутри TextBox`a
XML
1
2
        <TextBox  Height="52" Margin="83,135,283,0" TextWrapping="Wrap" VerticalAlignment="Top" Style="{DynamicResource SampleTextBox}" BorderBrush="#FF726060" IsReadOnly="{Binding IsChecked, ElementName=checkBox}" Text="SampleText"/>
        <CheckBox x:Name="checkBox" Content="CheckBox" HorizontalAlignment="Left" Margin="113.333,0,0,202.333" VerticalAlignment="Bottom" IsChecked="True"/>
если что вот мой код
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:Microsoft_Windows_Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Classic"
    x:Class="WpfApplication1.MainWindow"
    x:Name="Window"
    Title="MainWindow"
    Width="640" Height="480">
 
    <Window.Resources>
        <Style x:Key="SampleTextBox" TargetType="{x:Type TextBox}">
            <Setter Property="BorderBrush" Value="#00000000"/>
            <Setter Property="BorderThickness" Value="2"/>
            <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}"/>
            <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/>
            <Setter Property="Padding" Value="1"/>
            <Setter Property="KeyboardNavigation.TabNavigation" Value="None"/>
            <Setter Property="HorizontalContentAlignment" Value="Left"/>
            <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
            <Setter Property="AllowDrop" Value="True"/>
            <Setter Property="ScrollViewer.PanningMode" Value="VerticalFirst"/>
            <Setter Property="Stylus.IsFlicksEnabled" Value="False"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type TextBox}">
                        <Microsoft_Windows_Themes:ClassicBorderDecorator x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" BorderStyle="Sunken" Background="{TemplateBinding Background}">
                            <ScrollViewer x:Name="PART_ContentHost" Template="{DynamicResource SampleTextBoxContant}"/>
                        </Microsoft_Windows_Themes:ClassicBorderDecorator>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsEnabled" Value="False">
                                <Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
                                <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
        
        <ControlTemplate x:Key="SampleTextBoxContant" TargetType="{x:Type ScrollViewer}">
            <Grid x:Name="Grid" Background="{TemplateBinding Background}">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="Auto"/>
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition Height="*"/>
                    <RowDefinition Height="Auto"/>
                </Grid.RowDefinitions>
                <Rectangle x:Name="Corner" Grid.Column="1" Fill="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" Grid.Row="1"/>
                <ScrollContentPresenter x:Name="PART_ScrollContentPresenter" CanContentScroll="{TemplateBinding CanContentScroll}" CanHorizontallyScroll="False" CanVerticallyScroll="False" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Grid.Column="0" Margin="1,1,21,1" Grid.Row="0"/>
                <ScrollBar x:Name="PART_VerticalScrollBar" AutomationProperties.AutomationId="VerticalScrollBar" Cursor="Arrow" Grid.Column="1" Maximum="{TemplateBinding ScrollableHeight}" Minimum="0" Grid.Row="0" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" Value="{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{TemplateBinding ViewportHeight}"/>
                <ScrollBar x:Name="PART_HorizontalScrollBar" AutomationProperties.AutomationId="HorizontalScrollBar" Cursor="Arrow" Grid.Column="0" Maximum="{TemplateBinding ScrollableWidth}" Minimum="0" Orientation="Horizontal" Grid.Row="1" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" Value="{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{TemplateBinding ViewportWidth}"/>
                <CheckBox Content="CheckBox" HorizontalAlignment="Right" Height="10" Margin="0,0,5,0" Style="{DynamicResource SampleTextBox_CheckBox}" VerticalAlignment="Center" Width="10" Cursor="Hand"/>
            </Grid>
        </ControlTemplate>
        
        <Style x:Key="SampleTextBox_CheckBox" TargetType="{x:Type CheckBox}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type CheckBox}">
                        <Grid>
                            <Rectangle Fill="#FF7A0101" RadiusY="0.5" RadiusX="0.5"/>
                            <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Content=""/>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Window.Resources>
 
    <Grid x:Name="LayoutRoot">
        <TextBox  Height="52" Margin="83,135,283,0" TextWrapping="Wrap" VerticalAlignment="Top" Style="{DynamicResource SampleTextBox}" BorderBrush="#FF726060" IsReadOnly="{Binding IsChecked, ElementName=SampleTextBox_CheckBox}" Text="Что-то"/>
        <CheckBox x:Name="checkBox" Content="CheckBox" HorizontalAlignment="Left" Margin="113.333,0,0,202.333" VerticalAlignment="Bottom" IsChecked="True"/>
    </Grid>
</Window>
Он не работает, не могу понять как добраться до CheckBox который внутри.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2012, 00:32
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Изменение стандартного шаблона TextBox (C# WPF):

Изменение текста на кнопке стандартного диалога сохранения - C# WPF
Добрый день. Скажите, пожалуйста, можно ли в диалоговом окне Microsoft.Win32.SaveFileDialog как-нибудь изменить текст на кнопке...

Изменение шаблона ListView в WPF в Expression Blend - C# WPF
Здравствуйте. Подскажите, пожалуйста, может кто-то знает как изменить шаблон ListView в WPF в Expression Blend или видел какие-нибудь...

Изменение цвета строки в TextBox - C# WPF
Подскажите, как вывести в textbox строку например зелёного цвета: log_text.Text += &quot;Новая строка&quot; + &quot; &quot; + DateTime.Now +...

Изменение цвета границы Textbox - C# WPF
Есть форма для добавления нового пользователя, нужно ввести логин пароль и имейл: &lt;Window x:Class=&quot;Twitter_FluentAPI.AddUser&quot;...

Изменение textblock при вводе строки в textbox - C# WPF
Столкнулся с проблемой: Есть пустые textBox и textBlock. Необходимо что бы при вводе строки в textBox, в textBlock появилась некая...

Изменение текста в TextBox элемента в GridView при клике мышью - C# WPF
Здравствуйте, господа. Есть у меня GridView, который заполняется из файла json. У элемента есть определенные текстбоксы, куда выводится...

1
kenny69
burning1ife
1370 / 1197 / 171
Регистрация: 21.09.2008
Сообщений: 3,356
Записей в блоге: 9
12.06.2012, 12:46 #2
в своем шаблоне для CheckBox используй TemplateBinding на св-во IsReadOnly
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2012, 12:46
Привет! Вот еще темы с ответами:

Изменение забиндинного свойства Text компонента TextBox по нажатию Enter - C# WPF
Столкнулся со следующей проблемой: есть форма, на ней всего 2 активных элемента - кнопка и текстбокс код: &lt;Window...

Как отключить изменение цвета рамки TextBox при наведении курсора/выделение его - C# WPF
При использовании *TextBoxName*.BorderBrush рамка окрашивается, но если навести на TextBox курсор или перевести фокус, то цвет меняется....

Замена стандартного WebBrowser - C#
Как я понял, стандартный элемент WebBrowser базируется на IE 7.0. Можно ли обновить его хотя бы до 11 версии? Или существуют ли сторонние...

Работа стандартного драйвера PL2303 - C#
Добрый день. Помогите разобраться, как мне проуправлять выходами PL2303. Установил для этой микрухи драйвер, в добавок поскачивал проги...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru