Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WPF, Silverlight Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: DataContent на XAML (WPF)  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20286
Eld Hasp
ListDictionary - из пространства System.Collections.Specialized. И по префиксу col - он не находится.
Поэтому не пойму, то ли я что-то не так делаю.
Толи ещё надо префиксы определить?
Вы сами себе ответили. Только не надо называть пространства имен префиксами - вас не поймут.
24 сен 18, 16:49    [21684352]     Ответить | Цитировать Сообщить модератору
 Re: DataContent на XAML (WPF)  [new]
Eld Hasp
Member

Откуда:
Сообщений: 225
Shocker.Pro
Eld Hasp
ListDictionary - из пространства System.Collections.Specialized ....
Толи ещё надо префиксы определить?
Вы сами себе ответили. Только не надо называть пространства имен префиксами - вас не поймут.
Если б так просто всё было....
Может я конкретно туплю, не то делаю.
Я понимаю надо подключить пространство имён. Сделал так
xmlns:cols="clr-namespace:System.Collections.Specialized;assembly=mscorlib"
Но пространство не подключается. На строке <cols:ListDictionary x:Key="List1"> всё равно ошибка.
В коде, если указать using System.Collections.Specialized; тип ListDictionary появляется.
В XAML - ни как! По идее после <cols:, если нажать Ctrl+Пробел должен выйти список элементов. Тоже не выходит.
Ни как понять не могу, что не так делаю.
24 сен 18, 17:38    [21684425]     Ответить | Цитировать Сообщить модератору
 Re: DataContent на XAML (WPF)  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 3305
Потому, что класс ListDictionary это класс сборки System, а не mscorlib

Неправильно:
clr-namespace:System.Collections.Specialized;assembly=mscorlib
Правильно:
clr-namespace:System.Collections.Specialized;assembly=System

пример:
<Window x:Class="WpfApp13.MainWindow"
        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"
        xmlns:col="clr-namespace:System.Collections;assembly=mscorlib"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        xmlns:spc="clr-namespace:System.Collections.Specialized;assembly=System"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.Resources>
        <spc:ListDictionary x:Key="MyDict">
            <col:ArrayList x:Key="MyList1">
                <sys:String>Январь</sys:String>
                <sys:String>Февраль</sys:String>
                <sys:String>Март</sys:String>
                <sys:String>Апрель</sys:String>
                <sys:String>Май</sys:String>
                <sys:String>Июнь</sys:String>
                <sys:String>Июль</sys:String>
                <sys:String>Август</sys:String>
                <sys:String>Сентябрь</sys:String>
                <sys:String>Октябрь</sys:String>
                <sys:String>Ноябрь</sys:String>
                <sys:String>Декабрь</sys:String>
            </col:ArrayList>
            <col:ArrayList x:Key="MyList2">
                <sys:String>Понедельник</sys:String>
                <sys:String>Вторник</sys:String>
                <sys:String>Среда</sys:String>
                <sys:String>Четверг</sys:String>
                <sys:String>Пятница</sys:String>
                <sys:String>Суббота</sys:String>
                <sys:String>Воскресенье</sys:String>
            </col:ArrayList>
        </spc:ListDictionary>
    </Window.Resources>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <ListBox ItemsSource="{Binding [MyList1], Mode=OneWay, Source={StaticResource MyDict}}" HorizontalAlignment="Center" VerticalAlignment="Top"  Margin="10"/>
        <ListBox ItemsSource="{Binding [MyList2], Mode=OneWay, Source={StaticResource MyDict}}" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="10"/>
    </Grid>
</Window>
24 сен 18, 17:55    [21684446]     Ответить | Цитировать Сообщить модератору
 Re: DataContent на XAML (WPF)  [new]
Eld Hasp
Member

Откуда:
Сообщений: 225
Roman Mejtes
Потому, что класс ListDictionary это класс сборки System, а не mscorlib
Неправильно:
clr-namespace:System.Collections.Specialized;assembly=mscorlib
Правильно:
clr-namespace:System.Collections.Specialized;assembly=System
Спасибо за внимание!
Теперь понял - заработало.

И подскажите, пожалуйста, чтобы в будущем таких ошибок не совершать, где и как можно посмотреть каких сборок классы?
System.Collections - mscorlib
System.Collections.Specialized - System
Погуглил - сам не нашёл такой информации.
25 сен 18, 18:47    [21685843]     Ответить | Цитировать Сообщить модератору
 Re: DataContent на XAML (WPF)  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 3305
1. Встаете на объект или тип в C# Файле или на элемент в XAML, нажать F12 (дефолт)
открывается файл с метаданными типа, в 1 и 2 строке сразу видно, какая сборка (
2. Меню -> View -> Object Browser найти тип и посмотреть к какой сборке он относится.
3. Зайти на MSDN и посмотреть

#region Assembly PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
// C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\PresentationFramework.dll
#endregion

using System.Collections;
using System.ComponentModel;
using System.Windows.Automation.Peers;
using System.Windows.Controls.Primitives;
using System.Windows.Documents;
using System.Windows.Markup;

namespace System.Windows.Controls
{
    //
    // Summary:
    //     Represents a control that can be used to display or edit unformatted text.
    [ContentProperty("Text")]
    [Localizability(LocalizationCategory.Text)]
    public class TextBox : TextBoxBase, IAddChild, ITextBoxViewHost
    {
        //
        // Summary:
        //     Identifies the System.Windows.Controls.TextBox.TextWrapping dependency property.
        public static readonly DependencyProperty TextWrappingProperty;
        ...
}
25 сен 18, 18:56    [21685851]     Ответить | Цитировать Сообщить модератору
 Re: DataContent на XAML (WPF)  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20286
4. Поставить решарпер. Тогда вообще не придется неймспейсы указывать, написал ListDictionary, остальное решарпер сам найдет и допишет )
25 сен 18, 19:31    [21685893]     Ответить | Цитировать Сообщить модератору
 Re: DataContent на XAML (WPF)  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 3305
Shocker.Pro
4. Поставить решарпер. Тогда вообще не придется неймспейсы указывать, написал ListDictionary, остальное решарпер сам найдет и допишет )
VS2017 умеет это без решарпера, но работает хер пойми как, в итоге я уже просто привык руками всё делать, да и нужно это только по большей части для своих\чужих контролов, и для типов модели представления, за 1 файл не больше 4-5 доп. НСов. Если их больше, то скорее всего файл скомпонован неверно.
25 сен 18, 20:16    [21685934]     Ответить | Цитировать Сообщить модератору
 Re: DataContent на XAML (WPF)  [new]
Eld Hasp
Member

Откуда:
Сообщений: 225
Shocker.Pro, Спасибо за совет! Обязательно воспользуюсь.
Извиняюсь за надоедливость, но будьте любезны, помогите разобраться с вариантом использования ListDictionary.
Как в ресурсах создать экземпляр этого класса и присвоить ему значения?
Я попробовал так
    <Window.Resources>
        <local:MyContainer>
            
        </local:MyContainer>
    </Window.Resources>

Но ситуация странная какая-то. После ввода local: имя класса MyContainer видно и предлагается его вставить. Но после его ставки выдаёт ошибку "Имя "MyContainer" не существует ...".
Пожалуйста, помогите осуществить и этот вариант.
25 сен 18, 21:30    [21685988]     Ответить | Цитировать Сообщить модератору
 Re: DataContent на XAML (WPF)  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20286
Eld Hasp
разобраться с вариантом использования ListDictionary.
Eld Hasp
имя класса MyContainer видно и предлагается его вставить.
Не понял в итоге, с чем разобраться?

Eld Hasp
Но после его ставки выдаёт ошибку "Имя "MyContainer" не существует ...".
Скомпилируйте проект. Он просто не видит этого класса в dll-ке.
26 сен 18, 05:24    [21686153]     Ответить | Цитировать Сообщить модератору
 Re: DataContent на XAML (WPF)  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 4710
Roman Mejtes
1. Встаете на объект или тип в C# Файле или на элемент в XAML, нажать F12 (дефолт)
открывается файл с метаданными типа, в 1 и 2 строке сразу видно, какая сборка (
2. Меню -> View -> Object Browser найти тип и посмотреть к какой сборке он относится.
3. Зайти на MSDN и посмотреть

Я в последнее время вместо MSDN (что-то они вообще хардкорное сделали, в последниях версиях документации унаследованных мемберов можно увидеть только в базовом классе, где они определены) захожу сразу на https://referencesource.microsoft.com/ , и там из строки поиска сразу перехожу к нужному классу со всеми его потрохами.
26 сен 18, 05:58    [21686159]     Ответить | Цитировать Сообщить модератору
 Re: DataContent на XAML (WPF)  [new]
Eld Hasp
Member

Откуда:
Сообщений: 225
Shocker.Pro
Скомпилируйте проект. Он просто не видит этого класса в dll-ке.
Спасибо!
Причина действительно была в этом.
Ваш вариант с MyContainer - оказался самым удобным.
Ещё раз - Спасибо!
26 сен 18, 15:29    [21686889]     Ответить | Цитировать Сообщить модератору
 Re: DataContent на XAML (WPF)  [new]
Eld Hasp
Member

Откуда:
Сообщений: 225
Shocker.Pro, но теперь вылазеет ошибка при попытке исполнения во время инициализации элементов
XamlObjectWriterException: Свойство коллекции "DataContent_на_XAML___Wpf_.MyContainer"."ListDays" не определено (null).
В XAML окна сделал так:
<Window x:Class="DataContent_на_XAML___Wpf_.MainWindow"
................
    <Window.Resources>
        <local:MyContainer x:Key="MyContent">
            <local:MyContainer.ListDays>
                <sys:String>Понедельник</sys:String>
                <sys:String>Вторник</sys:String>
..................
           </local:MyContainer.ListDays>
            <local:MyContainer.ListMonths>
                <sys:String>Январь</sys:String>
                <sys:String>Февраль</sys:String>
.............................
            </local:MyContainer.ListMonths>
        </local:MyContainer>
    <Window.DataContext>
        <Binding Mode="OneWay" Source="{StaticResource MyContent}"/>
    </Window.DataContext>

    </Window.Resources>
.....................
        <ListBox ItemsSource="{Binding ListMonths}"  HorizontalAlignment="Center"  Margin="10"/>
        <ListBox ItemsSource="{Binding ListDays}" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="10"/>
..............
</Window>
Ни каких ошибок при редактировании XAML нет.
26 сен 18, 15:47    [21686918]     Ответить | Цитировать Сообщить модератору
 Re: DataContent на XAML (WPF)  [new]
Eld Hasp
Member

Откуда:
Сообщений: 225
Разобрался. Надо было списки в коде MyContainer инициализировать.
В таком варианте - всё заработало!
Спасибо!
26 сен 18, 15:51    [21686926]     Ответить | Цитировать Сообщить модератору
 Re: DataContent на XAML (WPF)  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 3305
почитай еще вот это:
https://docs.microsoft.com/ru-ru/dotnet/api/system.windows.markup.iaddchild?redirectedfrom=MSDN&view=netframework-4.7.2
26 сен 18, 16:52    [21687056]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / WPF, Silverlight Ответить