С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
винс
41 / 41 / 11
Регистрация: 16.03.2012
Сообщений: 199
1

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

12.06.2012, 00:32. Просмотров 1703. Ответов 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
Ответы с готовыми решениями:

Изменение стандартного стиля кнопки
Добрый день. Проект UWP. Пытаюсь сделать свой дизайн кнопки. Необходимо, чтобы...

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

Ввод данных в TextBox после применения шаблона
Всем привет. Помогите пожалуйста с таким вопросом. У меня имеется TextBox. Я...

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

Изменение цвета строки в TextBox
Подскажите, как вывести в textbox строку например зелёного цвета: ...

1
kenny69
burning1ife
1413 / 1235 / 292
Регистрация: 21.09.2008
Сообщений: 3,409
Записей в блоге: 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

Изменение цвета границы Textbox
Есть форма для добавления нового пользователя, нужно ввести логин пароль и...

Изменение элементов в Combobox по тексту в Textbox
Доброго вечера. Лежат у меня на окошечке TextBox и ComboBox. Я ввожу...

Динамическое изменение значений в TextBox или в DataGrid
Подскажите как сделать, чтобы например в TextBox или в DataGrid значение...


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

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

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