Гость
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / TabItem Datatempate / 5 сообщений из 5, страница 1 из 1
14.07.2014, 14:15
    #38695947
Draginsv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TabItem Datatempate
Добрый день!
Что делаю не так?
Написал шаблон для табитема, создаю их из кода, при переключении между ними состояние их не меняется, как будто это один и тот же табитем.
Код шаблона:
Код: 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.
                <DataTemplate x:Key="TabItemContent" >
                    <DockPanel Margin="0">
                        <Border DockPanel.Dock="Top" Height="Auto" Margin="0,0,0,2" BorderBrush="Black" BorderThickness="1" >
                            <TextBlock Name="StatusBar" Margin="2"  Height="Auto" Padding="5,2,2,4" TextWrapping="Wrap" Background="White" Style="{StaticResource TextDisplay}">Примененный фильтр к данным</TextBlock>
                        </Border>
                        <Grid DockPanel.Dock="Bottom" Margin="0"  Background="Azure">
                            <Grid.RowDefinitions>
                                <RowDefinition Height="*"></RowDefinition>
                                <RowDefinition Height="Auto"></RowDefinition>
                                <RowDefinition Height="Auto" MinHeight="30"></RowDefinition>
                            </Grid.RowDefinitions>
                            <DockPanel Grid.Row="0" Margin="0" MinHeight="60">
                                <StackPanel DockPanel.Dock="Bottom" Height="30" Orientation="Horizontal" Background="Beige">
                                    <Button Name="bn" Height="20" Content="Новая запись" Margin="2" Style="{StaticResource TextDisplay}" Click="Click_ButtonNewRecord"></Button>
                                    <Button Name="bd" Height="20" Content="Удалить" Margin="2" Style="{StaticResource TextDisplay}" Click="Click_ButtonDeleteRecord"></Button>
                                    <Button Name="be" Height="20" Content="Редактировать" Margin="2" Style="{StaticResource TextDisplay}" Click="Click_ButtonEditRecord"></Button>
                                    <Button Name="bf" Height="20" Content="Фильтр" Margin="2" Style="{StaticResource TextDisplay}" Click="Click_ButtonFilter"></Button>
                                </StackPanel>
                                <DataGrid DockPanel.Dock="Top"  MinHeight="30" Margin="0" SelectionUnit="CellOrRowHeader" FontFamily="Courier New"></DataGrid>
                            </DockPanel>
                            <GridSplitter Grid.Row="1" Margin="0" HorizontalAlignment="Stretch" VerticalAlignment="Center" Height="3" Background="Aqua"/>
                            <StackPanel Grid.Row="2">
                                <Border Grid.Row="3" MinHeight="30" Margin="0" BorderBrush="Black" BorderThickness="1" >
                                    <StackPanel Grid.Row="4" Orientation="Horizontal" >
                                        <Button Name="bc" Height="20" Content="Отменить" Margin="2" Style="{StaticResource TextDisplay}"></Button>
                                        <Button Name="bs" Height="20" Content="Сохранить" Margin="2" Style="{StaticResource TextDisplay}"></Button>
                                    </StackPanel>
                                </Border>
                            </StackPanel>
                        </Grid>
                    </DockPanel>
                </DataTemplate>



Код c#
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
        private void SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
        {
            if (TreeMenu.SelectedItem != null)
            {
                TreeViewItem tvi = (TreeViewItem)this.TreeMenu.SelectedItem;
                this.TabControl.Visibility = Visibility.Visible;
                TabItem ti = new TabItem();
                ti.Name = "ti" + tvi.Tag.ToString();
                ti.Header = tvi.Header;
                lTabItem.Add(ti);
                this.TabControl.Items.Add(ti);
                this.TabControl.SelectedItem = ti;
                //this.TreeMenu.IsEnabled = false;
                statusBar = this.StatusBar.Text;
                this.StatusBar.Text = "Панель " + ti.Header + " открыта.";
            }
        }



Передвигаю на одной вкладке гридсплитер, перехожу на другую, гридсплитер в положении как на первой, меняю на второй, перехожу на первую - вижу как на второй, состояние первой не сохранилоь.
...
Рейтинг: 0 / 0
15.07.2014, 10:37
    #38696633
Draginsv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TabItem Datatempate
Нашел подобную тему с табитемом, но у человека проблема с текстбоксом, говорит забиндил и решил проблему.
А как сплитер забиндить.
Создаю в xaml два табитема со сплитерами, запускаю все работает, в каждой табитем свое положение сплитера.
Добавляю ресурсы в табконтрол с шаблоном для табитема и все закладки как сговорились.

Код: 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.
        <TabControl Name="tc1" HorizontalAlignment="Left" Height="305" Margin="822,462,-666,-154" VerticalAlignment="Top" Width="527">
            <TabItem Name="t1" Header="TabItem1">
                <Grid Background="#FFE5E5E5">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="*"></RowDefinition>
                        <RowDefinition Height="Auto"></RowDefinition>
                        <RowDefinition Height="*"></RowDefinition>
                    </Grid.RowDefinitions>
                    <GridSplitter Grid.Row="1" Height="3" HorizontalAlignment="Stretch" VerticalAlignment="Center" Background="Black"></GridSplitter>
                </Grid>
            </TabItem>
            <TabItem Name="t2" Header="TabItem2">
                <Grid Background="#FFE5E5E5">
                    <Grid.RowDefinitions>
                    <RowDefinition Height="*"></RowDefinition>
                    <RowDefinition Height="Auto"></RowDefinition>
                    <RowDefinition Height="*"></RowDefinition>
                </Grid.RowDefinitions>
                    <GridSplitter  Grid.Row="1" Height="3" HorizontalAlignment="Stretch" VerticalAlignment="Center" Background="Black"></GridSplitter>
                </Grid>
            </TabItem>
            <TabControl.Resources>
                <DataTemplate x:Key="ContentItem">
                    <Grid Background="#FFE5E5E5">
                        <Grid.RowDefinitions>
                            <RowDefinition Height="*"></RowDefinition>
                            <RowDefinition Height="Auto"></RowDefinition>
                            <RowDefinition Height="*"></RowDefinition>
                        </Grid.RowDefinitions>
                        <GridSplitter Grid.Row="1" Height="5" HorizontalAlignment="Stretch" VerticalAlignment="Center" Background="Black"></GridSplitter>
                    </Grid>
                </DataTemplate>
                <Style TargetType="{x:Type TabItem}">
                    <Setter Property="ContentTemplate" Value="{StaticResource ContentItem}"/>
                </Style>
            </TabControl.Resources>
        </TabControl>



и кнопку с кодом
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
        private void Button_Click_10(object sender, RoutedEventArgs e)
        {
            TabItem ti = new TabItem();
            ti.Name = "ti3" ;
            ti.Header = "Шаблон";
            this.tc1.Items.Add(ti);
            this.tc1.SelectedItem = ti;
        }



после добавления ресурсов я так понимаю статическое описание табитемов игнорируется, шаблон берет верх.
Куда копать?
...
Рейтинг: 0 / 0
15.07.2014, 11:02
    #38696653
Draginsv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TabItem Datatempate
Интересно ведет себя шаблон в разметке.
Его нет, лепи любые контролы на табитемах.
Как только его вставляю в ресурсы, все контролы в конструкторе на закладках пропадают.
Принцип шаблона как объект между зеркалами, пофиг что разные экзкмпляры табитемов, как будто это ссылки на один табитем из шаблона.
...
Рейтинг: 0 / 0
15.07.2014, 23:45
    #38697290
unknownfromrus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TabItem Datatempate
Draginsv,

Мда. То что предлагает WPF - ты не используешь. Зачем такой подход?
Там где ты хочешь использовать дататемплейт - тебе достаточно на уровне ресурса (юзерконтрола) добавить его в ресурсы.
В дататемплейте укажи лишь дататайп. Все остальное за тебя сделает ВПФ
...
Рейтинг: 0 / 0
16.07.2014, 10:29
    #38697554
Draginsv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TabItem Datatempate
unknownfromrus ,

Спасибо за консультацию, но я новичок в впф.
Для начала я хочу понять почему сплитер в шаблоне ведет себя так, а именно при переходе по закладкам его индивидуальное состояние для каждой вкладки не сохраняется - везде одно положение. Как будто это как со свойствами зависимости - мгновенное реагирование объекта на изменение значения свойства. Типа двигая сплиттер, изменяем шаблон, на который ссылаются вкладки. Так?
Мне нужно чтобы вкладки были построены не по одному "снимку", а по одному "сценарию" и они были полностью независимы.
Ваш вариант я пока не понял.

Дизайн вкладки я хочу сделать универсальным
спиттер должен либо пользователем либо программно перемещаться между табличной и детальной частью представления данных.
Компобоксом для редактирования я пользоваться не хочу. Для подстановки Id ключа в детальную область, я хочу использовать вновь
рожденную вкладку соответствующего источника и так далее по дереву данных. Для этого мне понадобиться наверное создать контрол,
где он состоит из Лейблы, текстбокса для строки, кнопки вызова вкладки для выбора и невидимого текстбокса с Id ключа выбранного.
Но как это реализовать, я пока не имею опыта.
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / TabItem Datatempate / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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