Гость
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как сделать кнопочку со стрелочкой, в BomboBox побольше? / 9 сообщений из 9, страница 1 из 1
29.05.2014, 14:39
    #38655853
SNenko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать кнопочку со стрелочкой, в BomboBox побольше?
Форма используется на моноблоке(вводят пальцами на экране).

Там существует компонент ComboBox.
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
 <ComboBox
            Grid.Column="3"
            Grid.Row="5"
            Foreground="#FFDFFF00"
            HorizontalAlignment="Stretch"
            Margin="0"
            Name="tbChemicalName"
            VerticalAlignment="Stretch"
            KeyDown="cb1_KeyDown"
            IsEditable="True"
            Grid.RowSpan="1"
            VerticalContentAlignment="Bottom"
            HorizontalContentAlignment="Stretch"
            FlowDirection="LeftToRight"
            DataContext="{Binding}"
            Text=""
            IsTextSearchEnabled="False"
            IsHitTestVisible="True"
            MaxDropDownHeight="150"
            >



На элементе него маленькая стрелочка выпадающего списка(люди мажут). Как сделать кнопочку со стрелочной побольше?
Такой вариант растягивает весь компонент, ято недопустимо.
Код: xml
1.
2.
3.
<ComboBox.LayoutTransform>
                <ScaleTransform ScaleX="3" ScaleY="1" />
            </ComboBox.LayoutTransform>



Спасибо за внимание!
...
Рейтинг: 0 / 0
29.05.2014, 14:49
    #38655873
SNenko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать кнопочку со стрелочкой, в BomboBox побольше?
...
Рейтинг: 0 / 0
29.05.2014, 16:18
    #38656069
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать кнопочку со стрелочкой, в BomboBox побольше?
SNenko,

переопредели шаблон у ComboBox
ComboBox.Template или задай размер кнопки через стили, кнопка там ToggleButton
...
Рейтинг: 0 / 0
29.05.2014, 16:27
    #38656087
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать кнопочку со стрелочкой, в BomboBox побольше?
SNenko,
пример:

Код: 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.
<ComboBox Grid.Row="0">
            <ComboBox.Template>
                <ControlTemplate TargetType="{x:Type ComboBox}">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="Auto"/>
                        </Grid.ColumnDefinitions>

                        <TextBox IsReadOnly="True" Grid.ColumnSpan="2" Text="{Binding SelectedValue, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"/>

                        <ToggleButton Width="100" Height="100" Grid.Column="1" Margin="0,2,2,2"  ClickMode="Press" Focusable="False"
                                         IsChecked="{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}">
                            <Path HorizontalAlignment="Center" VerticalAlignment="Center" Data="M 0 0 L 4 4 L 8 0 Z" >
                                <Path.Fill>
                                    <SolidColorBrush Color="Black"/>
                                </Path.Fill>
                            </Path>
                        </ToggleButton>
                        <Popup x:Name="Popup" Placement="Bottom" IsOpen="{TemplateBinding IsDropDownOpen}" AllowsTransparency="True" Focusable="False" PopupAnimation="Slide">
                            <Grid x:Name="DropDown" SnapsToDevicePixels="True" MinWidth="{TemplateBinding ActualWidth}" MaxHeight="{TemplateBinding MaxDropDownHeight}">
                                <Border x:Name="DropDownBorder" BorderThickness="1">
                                    <Border.BorderBrush>
                                        <SolidColorBrush Color="{TemplateBinding BorderBrush}" />
                                    </Border.BorderBrush>
                                    <Border.Background>
                                        <SolidColorBrush Color="White" />
                                    </Border.Background>
                                </Border>
                                <ScrollViewer Margin="4,6,4,6"
                            SnapsToDevicePixels="True">
                                    <StackPanel  IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Contained">
                                        <StackPanel.Resources>
                                            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#009DDB"/>
                                        </StackPanel.Resources>
                                    </StackPanel>
                                </ScrollViewer>
                            </Grid>
                        </Popup>
                    </Grid>
                </ControlTemplate>
            </ComboBox.Template>
        </ComboBox>
...
Рейтинг: 0 / 0
29.05.2014, 16:49
    #38656131
SNenko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать кнопочку со стрелочкой, в BomboBox побольше?
Roman Mejtes,
Спасибо прибольшое!
Буду разбирать Ваш код и учиться))
...
Рейтинг: 0 / 0
30.05.2014, 13:10
    #38656958
SNenko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать кнопочку со стрелочкой, в BomboBox побольше?
SNenko,
Возвращаясь к теме.
При попытке ссылаться на tbChemicalName, не могу ни получить ни изменить програмно tbChemicalName.Text!
После Введения клавиатурой такста, праграма говорит что поле пустое он остается пустым

Как мне это исправить.

Код: c#
1.
2.
3.
4.
5.
6.
private void tbChemicalNumber_KeyDown(object sender, KeyEventArgs e)
{
    this.tbChemicalName.Text = "";
    if (e.Key.ToString() == "Return")
        this.btnMSDS_Click(sender, e);
}



Код: 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.
        <ComboBox
            Grid.Column="3"
            Grid.Row="5"
            Foreground="#FFDFFF00"
            HorizontalAlignment="Stretch"
            Margin="0"
            Name="tbChemicalName"
            VerticalAlignment="Stretch"
            KeyDown="cb1_KeyDown"
            IsEditable="True"
            Grid.RowSpan="1"
            VerticalContentAlignment="Bottom"
            HorizontalContentAlignment="Stretch"
            FlowDirection="LeftToRight"
            DataContext="{Binding}"
            IsHitTestVisible="True"
            MaxDropDownHeight="150"
            IsTextSearchEnabled="False"
            >

            <ComboBox.Template>
                <ControlTemplate TargetType="{x:Type ComboBox}">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="Auto"/>
                        </Grid.ColumnDefinitions>

                        <TextBox TextWrapping="Wrap"
                                 Text="{Binding SelectedValue, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"/>
                        
                        <ToggleButton Width="50" Grid.Column="1" Margin="0,2,2,2" IsChecked="{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}">
                            <Path HorizontalAlignment="Center" VerticalAlignment="Center"  Data="M 0 0 L 4 4 L 8 0 Z">
                                <Path.Fill>
                                    <SolidColorBrush Color="#FF284FA9"/>
                                </Path.Fill>
                            </Path>
                        </ToggleButton>

                        <Popup x:Name="Popup" Placement="Bottom" IsOpen="{TemplateBinding IsDropDownOpen}" AllowsTransparency="True" Focusable="False" PopupAnimation="Slide">
                            
                            <Grid x:Name="DropDown" SnapsToDevicePixels="True" MinWidth="{TemplateBinding ActualWidth}" MaxHeight="{TemplateBinding MaxDropDownHeight}">

                                <ScrollViewer Margin="4,6,4,6" SnapsToDevicePixels="True">
                                    <StackPanel Background="#FF284FA9" IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Contained">
                                        <StackPanel.Resources>
                                            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}"/>
                                        </StackPanel.Resources>
                                    </StackPanel>
                                </ScrollViewer>
                                
                            </Grid>
                            
                        </Popup>

                    </Grid>
                </ControlTemplate>
            </ComboBox.Template>

        </ComboBox>


Как получать данные из такого комбобокса?
...
Рейтинг: 0 / 0
30.05.2014, 14:00
    #38657022
@k@DElpher
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать кнопочку со стрелочкой, в BomboBox побольше?
Замените
Код: xml
1.
2.
<TextBox TextWrapping="Wrap" Text="{Binding SelectedValue, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"/>
 


На
Код: xml
1.
<TextBox x:Name="PART_EditableTextBox" TextWrapping="Wrap"/>



Ну для popup тоже желательно дать название <Popup x:Name="PART_Popup"

Источник: Стили и шаблоны элемента ComboBox

Сам еще не до конца понял почему ваш вариант не работает, но это первое, что я проверил. Просто в коде самого элемента управления (ComboBox в данном случае) элементы, помеченные PART_ могут использоваться, а когда их нет, то элемент управления может работать неправильно.
...
Рейтинг: 0 / 0
30.05.2014, 15:50
    #38657211
SNenko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать кнопочку со стрелочкой, в BomboBox побольше?
@k@DElpher,
Странно но после добавления "PART_", ЗАРАБОТАЛО!

Код: 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.
        <ComboBox
            Grid.Column="3"
            Grid.Row="5"
            Foreground="#FFDFFF00"
            HorizontalAlignment="Stretch"
            Margin="0"
            Name="PART_tbChemicalName"
            VerticalAlignment="Stretch"
            KeyDown="cb1_KeyDown"
            IsEditable="True"
            Grid.RowSpan="1"
            VerticalContentAlignment="Bottom"
            HorizontalContentAlignment="Stretch"
            FlowDirection="LeftToRight"
            DataContext="{Binding}"
            IsHitTestVisible="True"
            MaxDropDownHeight="150"
            IsTextSearchEnabled="True"
            IsDropDownOpen="False"
            ItemsSource="{Binding}"
            TabIndex="1">

            <ComboBox.Template>
                <ControlTemplate TargetType="{x:Type ComboBox}">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="Auto"/>
                        </Grid.ColumnDefinitions>

                        <TextBox x:Name="PART_EditableTextBox" TextWrapping="Wrap"/>
                        
                        <ToggleButton Width="50" Grid.Column="1" Margin="0,2,2,2" IsChecked="{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}">
                            <Path HorizontalAlignment="Center" VerticalAlignment="Center"  Data="M 0 0 L 4 4 L 8 0 Z">
                                <Path.Fill>
                                    <SolidColorBrush Color="#FF284FA9"/>
                                </Path.Fill>
                            </Path>
                        </ToggleButton>

                        <Popup x:Name="PART_Popup" Placement="Bottom" IsOpen="{TemplateBinding IsDropDownOpen}" AllowsTransparency="True" Focusable="False" PopupAnimation="Slide">
                            
                            <Grid x:Name="DropDown" SnapsToDevicePixels="True" MinWidth="{TemplateBinding ActualWidth}" MaxHeight="{TemplateBinding MaxDropDownHeight}">

                                <ScrollViewer Margin="4,6,4,6" SnapsToDevicePixels="True">
                                    <StackPanel Background="#FF284FA9" IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Contained">
                                        <StackPanel.Resources>
                                            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}"/>
                                        </StackPanel.Resources>
                                    </StackPanel>
                                </ScrollViewer>
                                
                            </Grid>
                            
                        </Popup>

                    </Grid>
                </ControlTemplate>
            </ComboBox.Template>

        </ComboBox>



СПАСИБО!
...
Рейтинг: 0 / 0
31.05.2014, 00:53
    #38657564
@k@DElpher
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать кнопочку со стрелочкой, в BomboBox побольше?
SNenko@k@DElpher,
Странно но после добавления "PART_", ЗАРАБОТАЛО!
Ну это такая принятая практика при проектировании контролов. У контрола есть:
Исходный код *.cs и Generic.xaml - стиль по умолчанию.
В данном случае вы стиль по умолчанию переопределили на свой.
Есть соглашение, что если в исходном коде контрола напрямую используются визуальные элементы (меняются их свойства из кода), то эти элементы стоит помечать названием "PART_". У комбобокса есть две такие части, без них он просто работает не так, как его задумывал разработчик.
http://professorweb.ru/my/WPF/Template/level17/template_index.php - вот можно попробовать тут об этом почитать (если не хочется более серьезную книгу читать). Про части "PART_" начинается с главы "Построение сложного шаблона"
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как сделать кнопочку со стрелочкой, в BomboBox побольше? / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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