powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / usercontrol как нарисованный?
22 сообщений из 22, страница 1 из 1
usercontrol как нарисованный?
    #37701790
sa13m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый вечер!

Есть пару вопросов:
1) Имеется UserControl, который содержит DataGrid и StatusBar. Что нужно сделать, чтобы в Desing mode можно было выбирать эти контролы(кликом мышки по каждому) и настраивать как обычно. В WinForm это было просто:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
        public override ISite Site
        {
            get
            {
                return base.Site;
            }
            set
            {
                base.Site = value;

                if (value != null)
                {
                    INestedContainer nc = (INestedContainer)this.Site.GetService(typeof(INestedContainer));

                    if (nc != null)
                    {
                        nc.Add(toolStrip, "ToolStrip");
                        nc.Add(dataGridView, "DataGridView");
                        nc.Add(statusStrip, "StatusStrip");
                    }
                }

            }
        }


Как это сделать в Wpf не смог найти.

2)Wpf Custom Control project. Наследуюсь от DataGrid, необходимо поменять Style DataGridColumnHeader. В Generic.xaml как я понял придется полностью переопределять Style DataGrid, чтобы подменить стиль DataGridColumnHeader. Но мне это не надо, хочется только изменить стиль DataGridColumnHeader, а остальное оставить как есть.

Спасибо за помощь!
...
Рейтинг: 0 / 0
usercontrol как нарисованный?
    #37705955
Sky Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sa13m,

2)

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<DataGrid>
   <DataGrid.Columns>
      <DataGridTextColumn Header="Дата/Время">
         <DataGridTextColumn.HeaderStyle>
	<Style>
	    <Setter Property="TextBlock.Foreground" Value="Green"/>
	</Style>
         </DataGridTextColumn.HeaderStyle>
      </DataGridTextColumn>
...



че нить типа такого.

а про 1) не понял вопроса)
...
Рейтинг: 0 / 0
usercontrol как нарисованный?
    #37705969
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sa13mЕсть пару вопросов:
1) Имеется UserControl, который содержит DataGrid и StatusBar. Что нужно сделать, чтобы в Desing mode можно было выбирать эти контролы(кликом мышки по каждому) и настраивать как обычно.Надо делать так:
Код: c#
1.
2.
3.
4.
5.
class MyUserControl : UserControl
{
    public DataGrid Grid { get; set; } // Лучше оформить как DependencyProperty
    public StatusBar Status { get; set; } // Лучше оформить как DependencyProperty
}


Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
<MyUserControl>
    <MyUserControl.Grid>
        <DataGrid/>
    </MyUserControl.Grid>
    <MyUserControl.Status>
        <StatusBar/>
    </MyUserControl.Status>
</MyUserControl>
...
Рейтинг: 0 / 0
usercontrol как нарисованный?
    #37707214
prBoris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К,

Думаю такой подход лучше будет.

Код: c#
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.
<Window x:Class="DataTypeTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:DataTypeTest"
        DataContext="{Binding RelativeSource={RelativeSource Self}}"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <DataTemplate x:Key="templateDataItemDisplay">
            <TextBlock Text="{Binding Header}"></TextBlock>
        </DataTemplate>
        <DataTemplate DataType="{x:Type local:DataItemBase}">
            <TextBlock Background="Yellow" Text="{Binding Header}"></TextBlock>
        </DataTemplate>
        <DataTemplate DataType="{x:Type local:DataItem1}">
            <StackPanel>
                <TextBlock Background="Yellow" Text="{Binding Header}"></TextBlock>
                <DataGrid MinWidth="150" MinHeight="150"></DataGrid>
            </StackPanel>
      
        </DataTemplate>
        <DataTemplate DataType="{x:Type local:DataItem2}">
            <StackPanel>
                <TextBlock Background="Yellow" Text="{Binding Header}"></TextBlock>
                <StatusBar MinWidth="150" MinHeight="150"></StatusBar>
            </StackPanel>
        </DataTemplate>
    </Window.Resources>

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <ListBox Grid.Row="0" ItemsSource="{Binding DataItems}" ItemTemplate="{StaticResource templateDataItemDisplay}" SelectedItem="{Binding SelectedDataItem, Mode=TwoWay}"></ListBox>
        <ContentControl Grid.Row="1" VerticalAlignment="Top" HorizontalAlignment="Left" Content="{Binding SelectedDataItem}"></ContentControl>

    </Grid>
</Window>


ну и

Код: c#
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.
sing System.Collections.ObjectModel;

namespace DataTypeTest
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public ObservableCollection<DataItemBase> DataItems
        {
            get { return (ObservableCollection<DataItemBase>)GetValue(DataItemsProperty); }
            set { SetValue(DataItemsProperty, value); }
        }
        public static readonly DependencyProperty DataItemsProperty =
            DependencyProperty.Register("DataItems", typeof(ObservableCollection<DataItemBase>), typeof(MainWindow), new UIPropertyMetadata());

        public DataItemBase SelectedDataItem
        {
            get { return (DataItemBase)GetValue(SelectedDataItemProperty); }
            set { SetValue(SelectedDataItemProperty, value); }
        }
        public static readonly DependencyProperty SelectedDataItemProperty =
            DependencyProperty.Register("SelectedDataItem", typeof(DataItemBase), typeof(MainWindow), new UIPropertyMetadata());

       
        public MainWindow()
        {
            InitializeComponent();
            DataItems = new ObservableCollection<DataItemBase>();

            DataItems.Add(new DataItemBase { Header = "DataitemBase header" });
            DataItems.Add(new DataItem1 { Header = "Data Grid header" });
            DataItems.Add(new DataItem2 { Header = "Status Bar header" });
        }
    }


    public class DataItemBase : DependencyObject
    {
        public string Header
        {
            get { return (string)GetValue(HeaderProperty); }
            set { SetValue(HeaderProperty, value); }
        }
        public static readonly DependencyProperty HeaderProperty =
            DependencyProperty.Register("Header", typeof(string), typeof(DataItemBase), new UIPropertyMetadata());
    }
    public class DataItem1 : DataItemBase
    {
        
    }
    public class DataItem2 : DataItemBase
    {
       
    }
}
...
Рейтинг: 0 / 0
usercontrol как нарисованный?
    #37707243
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
prBorisАлексей К,

Думаю такой подход лучше будет.Каким боком представленный код относится к заданному вопросу не совсем понятно.
...
Рейтинг: 0 / 0
usercontrol как нарисованный?
    #37707265
sa13m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей К,

Не получается достучаться до <MyUserControl>, вот код:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<UserControl x:Class="WpfControlLibrary1.MyUserControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid>
            
    </Grid>
</UserControl>



Содержимое файла .cs:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
    public partial class MyUserControl : UserControl
    {
        public MyUserControl()
        {
            InitializeComponent();
        }

        public DataGrid Grid
        {
            get { return (DataGrid)GetValue(GridProperty); }
            set { SetValue(GridProperty, value); }
        }

        // Using a DependencyProperty as the backing store for MyProperty.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty GridProperty =
            DependencyProperty.Register("Grid", typeof(DataGrid), typeof(MyUserControl), new UIPropertyMetadata(0));
    }



Попробовал явно задать сборку: xmlns:my="clr-namespace:WpfControlLibrary1;assembly=WpfControlLibrary1", при добавлении
<my:MyUserControl></my:MyUserControl> получаю ошибку The tag 'MyUserControl' does not exist in XML namespace 'clr-namespace:WpfControlLibrary1;assembly=WpfControlLibrary1'.
Спасибо!
...
Рейтинг: 0 / 0
usercontrol как нарисованный?
    #37707289
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
        public static readonly DependencyProperty GridProperty =
            DependencyProperty.Register("Grid", typeof(DataGrid), typeof(MyUserControl), new UIPropertyMetadata(0));

Дефолтное значение не соответствует типу свойства. Должно быть null а не 0.

ЗЫ: Лучше использовать FrameworkPropertyMetadata. Не помню почему :-)
...
Рейтинг: 0 / 0
usercontrol как нарисованный?
    #37707306
sa13m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sky Dragonsa13m,

2)

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<DataGrid>
   <DataGrid.Columns>
      <DataGridTextColumn Header="Дата/Время">
         <DataGridTextColumn.HeaderStyle>
	<Style>
	    <Setter Property="TextBlock.Foreground" Value="Green"/>
	</Style>
         </DataGridTextColumn.HeaderStyle>
      </DataGridTextColumn>
...



че нить типа такого.

а про 1) не понял вопроса)

Вы и 2 вопрос не поняли, при создании Custom controla в конструктор добавляется такой код:
Код: c#
1.
DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomControl1), new FrameworkPropertyMetadata(typeof(CustomControl1)));


т.е. переопределяем дефолтный стиль, а переопределяем его в generic.xaml содержимое:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WpfCustomControlLibrary1">
    <Style TargetType="{x:Type local:CustomControl1}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:CustomControl1}">
                    <Border Background="{TemplateBinding Background}"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}">

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



Куда тут Ваш код воткнуть? Я пытался неявно задавать стиль для DataGridColumnHeader, но он игнорируется, если закоментить DefaultStyleKeyProperty в конструкторе, то получим дефолтный DataGrid.
Спасибо!
...
Рейтинг: 0 / 0
usercontrol как нарисованный?
    #37707317
sa13m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей К
Код: c#
1.
2.
        public static readonly DependencyProperty GridProperty =
            DependencyProperty.Register("Grid", typeof(DataGrid), typeof(MyUserControl), new UIPropertyMetadata(0));

Дефолтное значение не соответствует типу свойства. Должно быть null а не 0.

ЗЫ: Лучше использовать FrameworkPropertyMetadata. Не помню почему :-)

Так проблема все равно не в этом, не могу достучаться до моего контрола, выше описано. На счет FrameworkPropertyMetadata Вас понял. Чтото ходим вокруг да около) Если не затрудник создайте проект UserConrol и попытайтесь сделать, то, что мне посоветовали.
Спасибо!
...
Рейтинг: 0 / 0
usercontrol как нарисованный?
    #37707328
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sa13mАлексей К
Код: c#
1.
2.
        public static readonly DependencyProperty GridProperty =
            DependencyProperty.Register("Grid", typeof(DataGrid), typeof(MyUserControl), new UIPropertyMetadata(0));

Дефолтное значение не соответствует типу свойства. Должно быть null а не 0.

ЗЫ: Лучше использовать FrameworkPropertyMetadata. Не помню почему :-)

Так проблема все равно не в этом, не могу достучаться до моего контрола, выше описано. Поэтому и не можете. Возникает ошибка в инициализаторе типа. Сначала исправьте, потом дальше можно разбираться.
sa13mЕсли не затрудник создайте проект UserConrol и попытайтесь сделать, то, что мне посоветовали.Нет под рукой Visual Studio. Может завтра, если время на работе позволит.
...
Рейтинг: 0 / 0
usercontrol как нарисованный?
    #37707334
sa13m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей К,

.cs
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
    public partial class MyUserControl : UserControl
    {
        public MyUserControl()
        {
            InitializeComponent();
        }

        public DataGrid Grid
        {
            get { return (DataGrid)GetValue(GridProperty); }
            set { SetValue(GridProperty, value); }
        }

        // Using a DependencyProperty as the backing store for MyProperty.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty GridProperty =
            DependencyProperty.Register("Grid", typeof(DataGrid), typeof(MyUserControl), new FrameworkPropertyMetadata(null));
    }



.xaml
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<UserControl x:Class="WpfControlLibrary1.MyUserControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:my="clr-namespace:WpfControlLibrary1;assembly=WpfControlLibrary1"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <my:MyUserControl>
        
    </my:MyUserControl>
</UserControl>



Та же ошибка.
...
Рейтинг: 0 / 0
usercontrol как нарисованный?
    #37707340
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<UserControl x:Class="WpfControlLibrary1.MyUserControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:my="clr-namespace:WpfControlLibrary1;assembly=WpfControlLibrary1"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <my:MyUserControl>
        
    </my:MyUserControl>
</UserControl>

Чего Вы пытаетесь сделать? Вставить юзерконтрол самого в себя?!
...
Рейтинг: 0 / 0
usercontrol как нарисованный?
    #37707353
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗЫ: По второму вопросу, вам подсказали как изменить заголовок грида без переопределения его ControlTemplate.
...
Рейтинг: 0 / 0
usercontrol как нарисованный?
    #37707360
sa13m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей К
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<UserControl x:Class="WpfControlLibrary1.MyUserControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:my="clr-namespace:WpfControlLibrary1;assembly=WpfControlLibrary1"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <my:MyUserControl>
        
    </my:MyUserControl>
</UserControl>

Чего Вы пытаетесь сделать? Вставить юзерконтрол самого в себя?!

Как мне еще обратиться к MyUserControl, переименовать UserControl в MyUserControl? Я так пытался, компилятор искал MyUserControl в сборке http://schemas.microsoft.com/winfx/2006/xaml/presentation
...
Рейтинг: 0 / 0
usercontrol как нарисованный?
    #37707371
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Повторюсь. Судя по представленному примеру, Вы пытаетесь вставить юзерконтрол самого в себя.
...
Рейтинг: 0 / 0
usercontrol как нарисованный?
    #37707378
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sa13mКак мне еще обратиться к MyUserControlКак минимум, обращаться к нему из другого контрола/формы.
...
Рейтинг: 0 / 0
usercontrol как нарисованный?
    #37707417
sa13m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей Кsa13mКак мне еще обратиться к MyUserControlКак минимум, обращаться к нему из другого контрола/формы.

Тогда Вы не совсем поняли вопрос. Ложим созданный юзерконтрол на Window, юзерконтрол состоит из DataGrid и StatusBar, хочу мышью нажать на DataGrid в юзерконтроле, чтобы выделился DataGrid, а не UserControl и настроить его опять же мышью тыркая по его свойствам. Я указал пример на WinForme, думал сразу станет понятно, так как обьяснить не просто.
...
Рейтинг: 0 / 0
usercontrol как нарисованный?
    #37707419
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sa13mТогда Вы не совсем поняли вопрос. Ложим созданный юзерконтрол на Window, юзерконтрол состоит из DataGrid и StatusBar, хочу мышью нажать на DataGrid в юзерконтроле, чтобы выделился DataGrid, а не UserControl и настроить его опять же мышью тыркая по его свойствам. Я указал пример на WinForme, думал сразу станет понятно, так как обьяснить не просто.Вопрос-то я понял. Вы не поняли как применить ответ.
...
Рейтинг: 0 / 0
usercontrol как нарисованный?
    #37707423
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только здесь небольшое отличие от WinForms. DataGrid надо создавать вне юзерконтрола. Ещё раз посмотрите на мой самый первый ответ.
...
Рейтинг: 0 / 0
usercontrol как нарисованный?
    #37707424
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КЕщё раз посмотрите на мой самый первый ответ.Там показан xaml создания юзерконтрола а не его содержимое.
...
Рейтинг: 0 / 0
usercontrol как нарисованный?
    #37707432
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там показан xaml создания использования юзерконтрола а не его содержимое.
...
Рейтинг: 0 / 0
usercontrol как нарисованный?
    #37707459
sa13m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей КТам показан xaml создания использования юзерконтрола а не его содержимое.

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


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