Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DataGridColumn.Visibility Exception, Вызов исключения в Win XP 
:(
    Опции темы
interv
  Дата 16.7.2013, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 24.1.2012

Репутация: нет
Всего: 4



Есть DataGridColumn, есть DataGrid
Код
Код

try{
datagrid.BeginInit();
dataGridColumn.Visibility = visual ? Visibility.Visible : Visibility.Collapsed;
datagrid.EndInit();
}
catch {}

вызывает исколючение при visual=true постфактум (т.е. не в этой строчке, а при отрисовке)
Ошибка наблюдается на WinXP. В Win7 исключение не возникает.

Буду благодарен ответу. Спасибо.

PS: Ошибка возникает только если хедер задан контролами
Код

<DataGridTextColumn.Header>
  <TextBlock Text="Вид"/>
</DataGridTextColumn.Header>


Это сообщение отредактировал(а) interv - 16.7.2013, 10:54
PM MAIL   Вверх
dzaraev
Дата 16.7.2013, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 12.1.2013

Репутация: нет
Всего: 1



Прежде, чем разбираться, хотелось бы сразу увидеть CallStack и информацию об используемых платформах: target framework сборки и версии .NET, установленные на машине с Win7 и на машине WinXP. На всякий случай - утилита для быстрой проверки версий .NET
--------------------
Если вопрос решён - помечайте тему.  
PM MAIL   Вверх
interv
Дата 16.7.2013, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 24.1.2012

Репутация: нет
Всего: 4



.NET 4.5.50709 - ошибки нет
.NET 4.0.30319 - ошибка есть {"Указанный элемент уже является логическим дочерним для другого элемента. Сначала отсоедините его."} 

Причем как недавно выяснилось - версия Win не имеет значения

StackTrace
Код

  в System.Windows.FrameworkElement.ChangeLogicalParent(DependencyObject newParent)
   в System.Windows.FrameworkElement.AddLogicalChild(Object child)
   в System.Windows.Controls.ContentControl.OnContentChanged(Object oldContent, Object newContent)
   в System.Windows.Controls.ContentControl.OnContentChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
   в System.Windows.PropertyChangedCallback.Invoke(DependencyObject d, DependencyPropertyChangedEventArgs e)
   в System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
   в System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
   в System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)
   в System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
   в System.Windows.DependencyObject.CoerceValue(DependencyProperty dp)
   в System.Windows.Controls.DataGridHelper.TransferProperty(DependencyObject d, DependencyProperty p)
   в System.Windows.Controls.Primitives.DataGridColumnHeader.PrepareColumnHeader(Object item, DataGridColumn column)
   в System.Windows.Controls.Primitives.DataGridColumnHeadersPresenter.PrepareContainerForItemOverride(DependencyObject element, Object item)
   в System.Windows.Controls.ItemsControl.MS.Internal.Controls.IGeneratorHost.PrepareItemContainer(DependencyObject container, Object item)
   в System.Windows.Controls.DataGridCellsPanel.AddContainerFromGenerator(Int32 childIndex, UIElement child, Boolean newlyRealized)
   в System.Windows.Controls.DataGridCellsPanel.GenerateChild(IItemContainerGenerator generator, Size constraint, DataGridColumn column, Int32& childIndex, Size& childSize)
   в System.Windows.Controls.DataGridCellsPanel.GenerateChild(IItemContainerGenerator generator, Size constraint, DataGridColumn column, IDisposable& generatorState, Int32& childIndex, Size& childSize)
   в System.Windows.Controls.DataGridCellsPanel.DetermineRealizedColumnsBlockList(Size constraint)
   в System.Windows.Controls.DataGridCellsPanel.MeasureOverride(Size constraint)
   в System.Windows.FrameworkElement.MeasureCore(Size availableSize)
   в System.Windows.UIElement.Measure(Size availableSize)
   в System.Windows.ContextLayoutManager.UpdateLayout()
   в System.Windows.ContextLayoutManager.UpdateLayoutCallback(Object arg)
   в System.Windows.Media.MediaContext.FireInvokeOnRenderCallbacks()
   в System.Windows.Media.MediaContext.RenderMessageHandlerCore(Object resizedCompositionTarget)
   в System.Windows.Media.MediaContext.RenderMessageHandler(Object resizedCompositionTarget)
   в System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   в MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
   в System.Windows.Threading.Dispatcher.WrappedInvoke(Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
   в System.Windows.Threading.DispatcherOperation.InvokeImpl()
   в System.Threading.ExecutionContext.runTryCode(Object userData)
   в System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
   в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
   в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   в System.Windows.Threading.DispatcherOperation.Invoke()
   в System.Windows.Threading.Dispatcher.ProcessQueue()
   в System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   в MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   в MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
   в System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   в MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
   в System.Windows.Threading.Dispatcher.WrappedInvoke(Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
   в System.Windows.Threading.Dispatcher.InvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
   в MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
   в MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
   в System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
   в System.Windows.Application.RunInternal(Window window)
   в System.Windows.Application.Run()
   в SysAdminApplication.App.Main() в d:\Projects\C++\SysAdminApplication(NEW)\obj\Release\App.g.cs:строка 0


В приложенном файле текст программы

Это сообщение отредактировал(а) interv - 16.7.2013, 12:28

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  WpfApplication1.rar 8,50 Kb
PM MAIL   Вверх
Алексей Селявский
Дата 17.6.2015, 08:19 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Столкнулся с подобной проблемой.
Выяснил, что ошибка возникает в случае, когда Header объявлен не как простой текст, а как UIElement, например так:
Код

<DataGridTextColumn IsReadOnly="True" Width="100" Binding="{Binding Path=ActualCost, Mode=OneWay, StringFormat=\{0:n2\}, ConverterCulture=ru}" CellStyle="{StaticResource dgCellStyle}"
                    x:Name="columnActualCost">
    <DataGridTextColumn.Header>
        <TextBlock Text="Цена" TextWrapping="Wrap"/>
    </DataGridTextColumn.Header>
</DataGridTextColumn>

В моём случае проблему решил вот такой метод:
Код

public static void DataGridColumnVisibilty(DataGridColumn column, Visibility visibility) {
    if (column.Header is UIElement) {
        (column.Header as UIElement).Visibility = visibility;
    }
    column.Visibility = visibility;
}

Вызываю вместо "column.Visibility = visibility".

Этот ответ добавлен с нового Винграда - http://vingrad.com
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.1134 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.