FilterControl - Пользовательский пользовательский элемент управления? - PullRequest
1 голос
/ 20 июня 2011

Я хочу создать FilterControl в Silverlight: [Caption] [TextBox] [Кнопка очистки]

Я хотел бы создать его как элемент управления styleabel с функциональностью кнопки очистки (нехочу оставить это другим разработчикам) и со свойствами (Caption, FilterText).

Но, насколько я знаю и вижу, первый - это пользовательский элемент управления, второй и третий - возможности пользовательского элемента управления.

Можно ли создать что-то подобное?


Вот код CC:

<!-- Built-In Style for FilterControl -->
<Style TargetType="Controls:FilterControl">
    <Setter Property="Template">
        <Setter.Value>
            <!-- ControlTemplate -->
            <ControlTemplate TargetType="Controls:FilterControl">
                <!-- Template's Root Visual -->
                <Grid x:Name="LayoutRoot">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="{TemplateBinding Height}"/>
                    </Grid.RowDefinitions>

                    <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">

                        <!--FilterCaption PART-->
                        <TextBlock x:Name="FilterCaptionTextBlock" Text="{TemplateBinding FilterCaption}" VerticalAlignment="Center" />

                        <!--FilterTextBox PART-->
                        <TextBox x:Name="FilterTextBox"
                               HorizontalAlignment="Center" Text="{Binding FilterText, Mode=TwoWay}" IsEnabled="{Binding IsEnabled}" VerticalAlignment="Center" />
                        <!--<TextBox x:Name="FilterTextBox"
                               HorizontalAlignment="Center" Text="{TemplateBinding FilterText}" IsEnabled="{Binding IsEnabled}" VerticalAlignment="Center" />-->

                        <!--ClearFilterTextButton PART-->
                        <Button x:Name="ClearFilterTextButton"
                               Content="X" IsEnabled="{TemplateBinding IsEnabled}" VerticalAlignment="Center" />

                    </StackPanel>

                    <!--VisualStateManager-->
                    <VisualStateManager.VisualStateGroups>
                        ...
                    </VisualStateManager.VisualStateGroups>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

1 Ответ

1 голос
/ 20 июня 2011

Во-первых, давайте проясним, что любой FrameworkControl, включая UserControl, может быть стилизован, однако я подозреваю, что вы можете ссылаться на возможность заменить шаблон элемента управления. Требуется настраиваемый шаблонный элемент управления.

Ответ на ваш вопрос: да, конечно.

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

Добавьте к нему свойства зависимостей для Caption и FilterText.

Используйте TemplateBinding, чтобы связать текст Captiona и Filter с элементами в шаблоне по умолчанию.

Вам необходимо указать, что для вашего шаблона требуется TemplatePart типа TextBox.

Вы должны написать код для отслеживания изменений в TextBox, чтобы элемент управления обновлял свое свойство Filter.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...