Предоставление кнопки в функциональности текстового поля, без использования пользовательского элемента управления, но с перевесом шаблона текстового поля - PullRequest
1 голос
/ 07 марта 2012

Я внедрил кнопку в текстовое поле, заменив шаблон следующим кодом:

<Style x:Key="{x:Type TextBox}" TargetType="{x:Type TextBoxBase}">
   <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type TextBoxBase}">

                <Border Name="Border"
                    CornerRadius="2" 
                    Padding="2"
                    Background="{StaticResource WindowBackgroundBrush}"
                    BorderBrush="{StaticResource SolidBorderBrush}"
                    BorderThickness="1">

                    <Grid x:Name="LayoutGrid">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="Auto" />
                            <ColumnDefinition Width="Auto" />
                        </Grid.ColumnDefinitions>

                        <ScrollViewer x:Name="PART_ContentHost" Grid.Column="0" />


                        <Button x:Name="XButton"
                                Grid.Column="2"
                                Width="25"
                                Height="25"
                                Content="X"
                                Visibility="Visible"
                                BorderBrush="Transparent"
                                Command="{Binding  ButtonClick}" />
                    </Grid>

                </Border>

            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Кнопка должна удалить все содержимое текстового поля при нажатии.Для этого я хотел бы использовать команду " Command =" {Binding ButtonClick} ""

Можно ли выполнить привязку без создания пользовательского элемента управления и библиотеки?Или как сделать привязку или функциональность?

Я использую шаблон MVVM. Есть ли способ, например, использовать ViewModel и создать свойство для привязки этого к?

1 Ответ

1 голос
/ 08 марта 2012

Для привязок в таком стиле я использую AttachedCommandBehaviors "ACB"

http://marlongrech.wordpress.com/2008/12/13/attachedcommandbehavior-v2-aka-acb/

Я использую его для обнаружения кликов по элементам в стиле, по которому я хочу определять клики. Я не использовал его для кнопок, но я думаю, что он должен работать так же хорошо.

Я привязан к предку стиля, типом которого является Контроль пользователя, возможно, его необходимо изменить для вашего приложения.

Вам необходимо добавить пространство имен xmlns: acb в ваш xaml, а также см. Ссылку для получения подробной информации.

<ControlTemplate TargetType="{x:Type ListViewItem}">
                    <StackPanel x:Name="IconBorder"
                               acb:CommandBehavior.Event="PreviewMouseUp"
                               acb:CommandBehavior.Command="{Binding Path=DataContext.SelectedListItemSingleClickCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}"
                               acb:CommandBehavior.CommandParameter="{Binding}">
                        <DockPanel LastChildFill="False" HorizontalAlignment="Left" Width="{Binding Width, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListViewItem}}}">
                            <TextBlock Text="{Binding Title}"
                                       DockPanel.Dock="Left"
                                       x:Name="ListItemText" />
                            <Image x:Name="ActionIcon" 
                                   Source="{Binding Path=DataContext.SelectedListActionIcon, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}" 
                                   DockPanel.Dock="Right"
                                   acb:CommandBehavior.Event="PreviewMouseUp"
                                   acb:CommandBehavior.Command="{Binding Path=DataContext.SelectedListActionIconClickCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}"
                                   acb:CommandBehavior.CommandParameter="{Binding}">
                            </Image>
                        </DockPanel>
                        <ContentPresenter DockPanel.Dock="Left" />
                    </StackPanel>
</ControlTemplate>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...