powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / UserControl который включает другие контролы
9 сообщений из 9, страница 1 из 1
UserControl который включает другие контролы
    #37139059
alex_myzn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток.
В проекте хочу сделать свою всплывающие панель инструментов которая выезжает сбоку. Короче поизвращавшись со всякими Storyboard получилось следующее:
Код: plaintext
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.
77.
78.
<UserControl
	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
	xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
	xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
	mc:Ignorable="d"
	x:Class="WpfApplication1.test_slide_panel"
	x:Name="UserControl" Margin="-148,0,0,0">
	<UserControl.Resources>
		<Storyboard x:Key="Storyboard1">
			<ThicknessAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="{x:Null}" Storyboard.TargetProperty="(FrameworkElement.Margin)">
				<SplineThicknessKeyFrame KeyTime="00:00:00.1000000" Value="-148,0,0,0"/>
				<SplineThicknessKeyFrame KeyTime="00:00:00.6000000" Value="0"/>
			</ThicknessAnimationUsingKeyFrames>
			<ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="border_caption" Storyboard.TargetProperty="(UIElement.Visibility)">
				<DiscreteObjectKeyFrame KeyTime="00:00:00" Value="{x:Static Visibility.Visible}"/>
				<DiscreteObjectKeyFrame KeyTime="00:00:00.1000000" Value="{x:Static Visibility.Collapsed}"/>
			</ObjectAnimationUsingKeyFrames>
		</Storyboard>

		<Storyboard x:Key="Storyboard2">
			<ThicknessAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="{x:Null}" Storyboard.TargetProperty="(FrameworkElement.Margin)">
				<SplineThicknessKeyFrame KeyTime="00:00:00.5000000" Value="-148,0,0,0"/>
				<SplineThicknessKeyFrame KeyTime="00:00:00.6000000" Value="-128,0,0,0"/>
			</ThicknessAnimationUsingKeyFrames>
			<ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="border_caption" Storyboard.TargetProperty="(UIElement.Visibility)">
				<DiscreteObjectKeyFrame KeyTime="00:00:00" Value="{x:Static Visibility.Collapsed}"/>
				<DiscreteObjectKeyFrame KeyTime="00:00:00.5000000" Value="{x:Static Visibility.Visible}"/>
			</ObjectAnimationUsingKeyFrames>
		</Storyboard>
	</UserControl.Resources>
	<UserControl.Triggers>
		<EventTrigger RoutedEvent="Mouse.MouseDown" SourceName="border_caption">
			<BeginStoryboard Storyboard="{StaticResource Storyboard1}"/>
		</EventTrigger>
		<EventTrigger RoutedEvent="Mouse.MouseDown" SourceName="border_caption1">
			<BeginStoryboard Storyboard="{StaticResource Storyboard2}"/>
		</EventTrigger>
	</UserControl.Triggers>
    
    <Grid x:Name="grid">
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition Width="20"/>
        </Grid.ColumnDefinitions>

        <Border Name="border_caption" CornerRadius="0,8,8,0" Margin="0,0,0,0" Grid.Column="1">
            <Border.Background>
                <LinearGradientBrush StartPoint="1,0" EndPoint="0,0">
                    <GradientStop Color="#FF717171" Offset="0.20" />
                    <GradientStop Color="#FF404040" Offset="0.60" />
                    <GradientStop Color="#FF717171" Offset="0.20" />
                </LinearGradientBrush>
            </Border.Background>
            <TextBlock Foreground="#FFA6CEDD" TextAlignment="Left" Margin="0,8,3,0" d:IsHidden="True">
			    <TextBlock.LayoutTransform>
                    <RotateTransform Angle="90"/>
                </TextBlock.LayoutTransform>
			   Tools
			</TextBlock>
        </Border>

            <Border DockPanel.Dock="Right" Name="border_caption1"  CornerRadius="8,8,0,0" Height="20" Grid.Column="0" VerticalAlignment="Top">
                <Border.Background>
                    <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                        <GradientStop Color="#FF717171" Offset="0.20" />
                        <GradientStop Color="#FF404040" Offset="0.60" />
                        <GradientStop Color="#FF717171" Offset="0.20" />
                    </LinearGradientBrush>
                </Border.Background>
                <TextBlock Foreground="#FFA6CEDD" TextAlignment="Left" Margin="8,3,0,3" d:IsHidden="True" RenderTransformOrigin="0.5,0.5">
                	Tools</TextBlock>
            </Border>
                <StackPanel Grid.Column="0" Name="tool_panel">
			<!-- ПРОБЛЕМА НАХОДИТСЯ ЗДЕСЬ!! Что написать чтобы сюда что-то попало из тестового окна??? --->
                </StackPanel>
    </Grid>
</UserControl>

Проблема в том как наполнить этот самый контрол разным содержимым. Или даже как внутри этого контрола разместить другой?

Это код тестового окна
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<Window
	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
	xmlns:local="clr-namespace:WpfApplication1" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
	x:Class="WpfApplication1.MainWindow"
	x:Name="Window"
	Title="MainWindow"
	Width="640" Height="480">
	<Grid HorizontalAlignment="Left">
		<local:test_slide_panel x:Name="test_slide_panel" Margin="-128,0,0,0" Width="148">
			<!-- ПРОБЛЕМА НАХОДИТСЯ ЗДЕСЬ!! Что написать здесь чтобы мой контрол содержал что либо --->
		</local:test_slide_panel>
	</Grid>
</Window>


Так как таких панелей в программе несколько и их содержимое разное хотелось бы иметь иметь один UserControl-контейнер который можно наполнить разным содержимым типа текст-бокcы, кнопки, панели и другие UserControls.
Пока все поиски в инете ни к чему не привели
Был такой пример
Код: plaintext
1.
2.
3.
                <StackPanel Grid.Column="0" Name="tool_panel">
				<ContentPresenter/>
                </StackPanel>
Так он в принципе не работает.
При попытке вписать в форме например это
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
	<Grid HorizontalAlignment="Left">
		<local:test_slide_panel x:Name="test_slide_panel" Margin="-128,0,0,0" Width="148">
		<local:test_slide_panel.Content>
		<Ellipse Height="20" Width="120" Fill="Red"/>
		</local:test_slide_panel.Content>
		</local:test_slide_panel>
	</Grid>
Получаем просто эллипс в контейнере а все остальное убивается.



Идеи, если можно с живым кодом не думаю что он
...
Рейтинг: 0 / 0
UserControl который включает другие контролы
    #37140520
Фотография уТКа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_myzn,

вы сделали почти правильно, нужно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
<StackPanel Grid.Column="0" Name="tool_panel">
<ContentControl
                            x:Name="content"
                            Content="{TemplateBinding Content}"
                            ContentTemplate="{TemplateBinding ContentTemplate}"
                            HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
                            VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"/>
</StackPanel>

и не забудьте, ваш Родительский класс контрола должен наследоваться от ContentControl

я изучаю Silverlight Toolkit - там очень интересно :)
...
Рейтинг: 0 / 0
UserControl который включает другие контролы
    #37143094
i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i
Гость
Для подобного есть готовый контрол - Popup . C анимацией, возможностью относительного позиционирования и любым контекстом
...
Рейтинг: 0 / 0
UserControl который включает другие контролы
    #37143529
alex_myzn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо большое всем за ответы!
Контрол Popup немного не то, так как он накладывается поверх других контролов и не принимает участие в общем построении грида. Но все равно спасибо так как эта штуковина может пригодиться в другом месте.
Правда если честно я еще не проверил как работает предложный код но когда проверю сообщу обязательно!
...
Рейтинг: 0 / 0
UserControl который включает другие контролы
    #37143907
i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i
Гость
alex_myzn проекте хочу сделать свою всплывающие панель инструментов которая выезжает сбоку. Короче
Именно это позволяет сделать Popup
...
Рейтинг: 0 / 0
UserControl который включает другие контролы
    #37144084
alex_myzn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
i, еще раз спасибо за то что подсказали мне. Но из того примера, ссылку на который вы дали, не понятно как встроить эту панель в главный грид окна. Панель действительно выезжает но закрывает собой то что находится под ней. Для решения моей задачи эта панель не должна перекрывать что-либо, т.к. под ней находится окно содержащие 3D модель а в самой панели будут располагаться элементы управления этой самой моделью, а так как приложение полноэкранное, перекрытие какой либо части модели не желательно, хотя трансформация по осям вполне допустима. Так что открытии панели необходимо сжать модель, так же, как это делает StackPanel. Но тем не менее я очень вам благодарен за то что выа мне рассказали о этом контроле. Уверен он мне еще пригодиться.
...
Рейтинг: 0 / 0
UserControl который включает другие контролы
    #37144436
i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i
Гость
alex_myzni, еще раз спасибо за то что подсказали мне. Но из того примера, ссылку на который вы дали, не понятно как встроить эту панель в главный грид окна. Панель действительно выезжает но закрывает собой то что находится под ней. Для решения моей задачи эта панель не должна перекрывать что-либо, т.к. под ней находится окно содержащие 3D модель а в самой панели будут располагаться элементы управления этой самой моделью, а так как приложение полноэкранное, перекрытие какой либо части модели не желательно, хотя трансформация по осям вполне допустима. Так что открытии панели необходимо сжать модель, так же, как это делает StackPanel. Но тем не менее я очень вам благодарен за то что выа мне рассказали о этом контроле. Уверен он мне еще пригодиться.

Более внятное описание. При таком варианте проще всего это сделать с помощью StackPanel, которая содержит два ContextControl'a(один для 3D модели, другой - toolbox). Контекст у них может быть любой.
...
Рейтинг: 0 / 0
UserControl который включает другие контролы
    #37153893
alex_myzn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
уТКаalex_myzn,

вы сделали почти правильно, нужно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
<StackPanel Grid.Column="0" Name="tool_panel">
<ContentControl
                            x:Name="content"
                            Content="{TemplateBinding Content}"
                            ContentTemplate="{TemplateBinding ContentTemplate}"
                            HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
                            VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"/>
</StackPanel>

и не забудьте, ваш Родительский класс контрола должен наследоваться от ContentControl

я изучаю Silverlight Toolkit - там очень интересно :)

Не все так просто как хотелось бы...
Если поставить этот код то ругается на TemplateBinding так как это никакой не Template. Если компонент сделать Template то тогда не удается подключить триггера, не видит "border_caption" и "border_caption1". Если убрать все что связано с TemplateBinding возвращаемся к ситуации что любой контрол вставленный внутрь уже в окне программы забивает контролы которые были заложены в сам UserControl.
Да и еще... UserControl это потомок ContentControl так что не вижу смысла в использовании ContentControl. Хотя я конечно это я попробовал, но не помогло. :-(
...
Рейтинг: 0 / 0
UserControl который включает другие контролы
    #37153985
alex_myzn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Итак есть частичное решение проблемы!
Не так красиво как предполагалось но все же...

Знакомитесь: Expander

Пример эксплуатации:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<Expander Name="myExpander" Background="#FF404040" HorizontalAlignment="Left" ExpandDirection="Left" IsExpanded="True" MaxWidth="100" Margin="0,1,0,-1">
   <Expander.Header>
      <TextBlock Foreground="#FFA6CEDD" TextAlignment="Left" Margin="3,0,3,0" >
	   <TextBlock.LayoutTransform>
                  <RotateTransform Angle="90"/>
            </TextBlock.LayoutTransform>
	    Tools
	</TextBlock>		
   </Expander.Header>
   <StackPanel>
		<TextBlock TextWrapping="Wrap">
    			Lorem ipsum dolor sit amet, consectetur
    			adipisicing elit, sed do eiusmod tempor incididunt ut
    			labore et dolore magna aliqua
  		</TextBlock>
		<Button Margin="20">Я кнопка</Button>
    </StackPanel>
</Expander>

Но вот как заставить его выезжать плавно и чего у него внутри я еще не разобрался.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / UserControl который включает другие контролы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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