Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WPF, Silverlight Новый топик    Ответить
 Вопрос: Наследование в WPF  [new]
crusnik
Member

Откуда: Реутов, МСК
Сообщений: 95
Потребовалось сделать в проекте кучу формочек почти с однотипным содержанием. По идее лучше всего подошло бы написать класс от него унаследовать все кучу форм. Но все мои попытки привели к тому, я получал одни ошибки.

Вопрос, как правильно сделать наследование.
Второй вопрос, где можно об этом толковое что-нибудь почитать. Или на какую ключевую фразу стоит погуглить?
7 сен 08, 09:05    [6155592]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос: Наследование в WPF  [new]
TeXpert
Member

Откуда:
Сообщений: 556
crusnik
Но все мои попытки привели к тому, я получал одни ошибки
Вижу, ошибки довольно серьёзные. Исправляй их
Второй вопрос, где можно об этом толковое что-нибудь почитать. Или на какую ключевую фразу стоит погуглить?
Надо же. Гугель даже на не совсем удачную фразу поиска (цитирую тебя)
как правильно сделать наследование
уже что-то выдаёт
Вообще-то, загляни ещё сюда Не помешает спросить у Гугеля "Как правильно задавть вопросы"

А WPF, вообще-то ни при чём. Наследование -- фича языка
7 сен 08, 12:09    [6155691]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос: Наследование в WPF  [new]
TeXpert
Member

Откуда:
Сообщений: 556
Надо же:)). Решил приколоться, насчёт спросить у Гугеля "Как правильно задавать вопросы" -- и тут (о чудо!), -- Гугель ответил мне, разразившись кучей ссылок. Обязательно посмотри первые три. Вывод: если разумно прикинуть, что и как спросить, то Гугель скажет всё, ну почти всё
7 сен 08, 12:17    [6155695]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос: Наследование в WPF  [new]
crusnik
Member

Откуда: Реутов, МСК
Сообщений: 95
TeXpert
crusnik
Но все мои попытки привели к тому, я получал одни ошибки
Вижу, ошибки довольно серьёзные. Исправляй их
Второй вопрос, где можно об этом толковое что-нибудь почитать. Или на какую ключевую фразу стоит погуглить?
Надо же. Гугель даже на не совсем удачную фразу поиска (цитирую тебя)
как правильно сделать наследование
уже что-то выдаёт
Вообще-то, загляни ещё сюда Не помешает спросить у Гугеля "Как правильно задавть вопросы"

А WPF, вообще-то ни при чём. Наследование -- фича языка


1. Переформулирую вопрос передельно четко.
а) гугль выдает на мой вопрос информацию следующего характера, что WPF хорошо наследует стили, но при наследовании объектов проблемы возникали не только у меня.
2) С точик зрения логики и правил языка c# (WinForms) мне достаточно написать
public partial class ФормаПотомок :ФормаРодитель
3) Если я напишу, тоже самое в WPF, я тутже получаю ошибку на уровне ХАМЛа
4) Если я начинаю ковырять ХАМЛ,то форма родитель вроде бы подтягивается, но вместе с ней тянется партиал класс и между двумя классами (ФормаРодитель и ФормаПотомок) происходит конфликт.
7 сен 08, 14:47    [6155841]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос: Наследование в WPF  [new]
TeXpert
Member

Откуда:
Сообщений: 556
crusnik
Переформулирую вопрос передельно четко
Слава Всевышнему!
гугль выдает на мой вопрос информацию следующего характера, что WPF хорошо наследует стили, но при наследовании объектов проблемы возникали не только у меня
Ссылка где? И что означает стили -- конкретнее?
Если я напишу, тоже самое в WPF, я тутже получаю ошибку на уровне ХАМЛа
Без доказательства всё это пример так называемой эмоции. Бесполезной. Ты плохо читал ту ссылку, про "Как правильно задавать вопросы"
происходит конфликт
За кусок сыра? Опять эмоции!
7 сен 08, 14:54    [6155847]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос: Наследование в WPF  [new]
Осака Вестингауз
Member

Откуда: Default City
Сообщений: 285
Разметку может иметь только самый последний класс в иерархии. Все базовые должны быть без разметки.
7 сен 08, 15:41    [6155883]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос: Наследование в WPF  [new]
crusnik
Member

Откуда: Реутов, МСК
Сообщений: 95
Осака Вестингауз
Разметку может иметь только самый последний класс в иерархии. Все базовые должны быть без разметки.


Оказалось ты прав на все сто процентов.

Ответ из МСДН-овского форума:

автор
Your base control can't be defined in XAML. This is not supported in WPF. You must create your base class in pure code.


В связи с чем вопрос. Есть ли какие-нибудь инструменты по конверсии Хамл-разметки в код?
7 сен 08, 18:34    [6156047]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос: Наследование в WPF  [new]
nexus72
Member

Откуда:
Сообщений: 5
2 автор: Попробуйте вот так (это правда не совсем то что вы хотите, но все же...):
<UserControl 
  x:Class="UntitledProject1.BaseUserControl"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  Height="300" Width="300"
  >
  
  <Grid>
    <WrapPanel>
      <Button x:Name="btnBase">test button</Button>
    </WrapPanel>
  </Grid>
</UserControl>

public partial class BaseUserControl : UserControl
{
    public BaseUserControl()
    {
        InitializeComponent();
    }
}

// ===========================================================

public partial class UserControl1 : BaseUserControl
{
    public UserControl1()
    {
        InitializeComponent();
        btnBase.Width = 100;
        btnBase.Height = 100;
    }
}

// ===========================================================

public partial class BaseUC : UserControl
{
    private ObservableCollection<string> _dataSource = new ObservableCollection<string>();

    public ObservableCollection<string> DataSource
    {
        get { return _dataSource; }
        set { _dataSource = value; }
    }
}

// ===========================================================

<local:BaseUC
  x:Class="UntitledProject1.UserControl2"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:local="clr-namespace:UntitledProject1"
  Height="300" Width="300"
>
  
  <Grid Background="Yellow">
    <ItemsControl x:Name="testData" />
  </Grid>
</local:BaseUC>

public partial class UserControl2 : BaseUC
{
    public UserControl2()
    {
        InitializeComponent();
        this.DataSource.Add("aaa");
        this.DataSource.Add("bbb");
        testData.ItemsSource = this.DataSource;
    }
}

// ===========================================================

<Window
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  x:Class="UntitledProject1.Window1"
  x:Name="Window"
  Title="Window1"
  Width="640" Height="480"
  >

  <Grid x:Name="LayoutRoot" Background="#FF000000">
    <Grid.RowDefinitions>
      <RowDefinition Height="Auto" />
      <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <WrapPanel>
      <Button Width="100" VerticalAlignment="Top" Content="Button" Click="Button_Click_1" />
      <Button Width="100" VerticalAlignment="Bottom" Content="Button" Click="Button_Click" />
    </WrapPanel>
    
    <WrapPanel x:Name="panel" Grid.Row="1">      
    </WrapPanel>
  </Grid>
</Window>

public partial class Window1
{
    public Window1()
    {
        this.InitializeComponent();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        UserControl uc = new UserControl2();
        panel.Children.Add(uc);
    }

    private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        UserControl uc = new UserControl1();
        panel.Children.Add(uc);
    }
}
8 сен 08, 00:25    [6156418]     Ответить | Цитировать Сообщить модератору
Все форумы / WPF, Silverlight Ответить