gpt4 book ai didi

c# - wp7 芒果中的 DataTemplateSelector

转载 作者:行者123 更新时间:2023-11-30 12:34:25 26 4
gpt4 key购买 nike

我的应用中需要一个数据模板选择器。我找到了 this blog在 7.0 上效果很好。将我的项目升级到 7.1 后,设置模板时出现“未指定错误”。我试着把他们在博客上发布的示例项目升级到芒果,它仍然有效。我不明白我做错了什么,因为这段代码对芒果来说似乎没问题。有什么建议吗?

<Grid x:Name="LayoutRoot" Background="Transparent" VerticalAlignment="Stretch" >
<StackPanel VerticalAlignment="Stretch">
<StackPanel Orientation="Horizontal">
<TextBlock x:Name="nameBlock" Grid.Row="0" Grid.Column="0" VerticalAlignment="Center" Text="Identifier:" />
<TextBox x:Name="nameTextBox" Grid.Row="0" Grid.Column="1" Text="{Binding Path=Identifier, Mode=TwoWay}" Height="72" Width="410" TextChanged="nameTextBox_TextChanged"/>
</StackPanel>
<StackPanel Grid.Row="3" Grid.Column="1" Background="Black" VerticalAlignment="Stretch" >
<ListBox Margin="12,12,0,0" Name="listBox1" Background="Transparent" ItemsSource="{Binding Path=PropertiesCollection}" VerticalAlignment="Stretch" Height="300" >
<ListBox.ItemTemplate>
<DataTemplate>
<ViewModel:ParameterTemplateSelector Content="{Binding}">
<ViewModel:ParameterTemplateSelector.TextDataTemplate>
<DataTemplate>

<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Key}" VerticalAlignment="Center" Grid.Column="0" />
<TextBox Name="propertyTextBox" Text="{Binding Value, Mode=TwoWay}" Grid.Column="1" Width="400" TextChanged="propertyTextBox_TextChanged" />
</Grid>

</DataTemplate>
</ViewModel:ParameterTemplateSelector.TextDataTemplate>

<ViewModel:ParameterTemplateSelector.NumberDataTemplate>
<DataTemplate>

<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Key}" VerticalAlignment="Center" Grid.Column="0" />
<TextBox Name="propertyTextBox" Text="{Binding Value, Mode=TwoWay}" Grid.Column="1" Width="400" TextChanged="propertyTextBox_TextChanged" />
</Grid>

</DataTemplate>
</ViewModel:ParameterTemplateSelector.NumberDataTemplate>

<ViewModel:ParameterTemplateSelector.DateDataTemplate>
<DataTemplate>

<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Key}" VerticalAlignment="Center" Grid.Column="0" />
<toolkit:DatePicker Grid.Column="1" Width="400" Value="{Binding Value, Mode=TwoWay}" ValueChanged="DatePicker_ValueChanged"/>
</Grid>

</DataTemplate>
</ViewModel:ParameterTemplateSelector.DateDataTemplate>

<ViewModel:ParameterTemplateSelector.TimeDataTemplate>
<DataTemplate>

<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Key}" VerticalAlignment="Center" Grid.Column="0" />
<toolkit:TimePicker Grid.Column="1" Width="400" Value="{Binding Value, Mode=TwoWay}" ValueChanged="TimePicker_ValueChanged"/>
</Grid>

</DataTemplate>
</ViewModel:ParameterTemplateSelector.TimeDataTemplate>

</ViewModel:ParameterTemplateSelector>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>

</StackPanel>
</Grid>

public class ParameterTemplateSelector : DataTemplateSelector
{
public DataTemplate TextDataTemplate
{
get;
set;
}

public DataTemplate NumberDataTemplate
{
get;
set;
}

public DataTemplate DateDataTemplate
{
get;
set;
}

public DataTemplate TimeDataTemplate
{
get;
set;
}

public DataTemplate PictureDataTemplate
{
get;
set;
}

public DataTemplate NonParamDataTemplate
{
get;
set;
}

public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
string type = "";
if (item is IParam)
{
IParam parameter = item as IParam;
type = parameter.Type;
}
else if (item is KeyValue)
{
KeyValue k = item as KeyValue;
type = k.Type;
}

switch (type)
{
case "String":
return TextDataTemplate;
case "Text":
return TextDataTemplate;
case "Number":
return NumberDataTemplate;
case "Date":
return DateDataTemplate;
case "Time":
return TimeDataTemplate;
case "Picture":
return PictureDataTemplate;
default:
return TextDataTemplate;
}

}

}

public abstract class DataTemplateSelector : ContentControl
{
public virtual DataTemplate SelectTemplate(object item, DependencyObject container)
{
return null;
}

protected override void OnContentChanged(object oldContent, object newContent)
{
base.OnContentChanged(oldContent, newContent);

ContentTemplate = SelectTemplate(newContent, this);
}
}

我得到的异常是:

System.Exception occurred
Message=Unspecified error
StackTrace:
at MS.Internal.XcpImports.CheckHResult(UInt32 hr)
at MS.Internal.XcpImports.FrameworkElement_MeasureOverride(FrameworkElement element, Size availableSize)
at System.Windows.FrameworkElement.MeasureOverride(Size availableSize)
at System.Windows.FrameworkElement.MeasureOverride(IntPtr nativeTarget, Double inWidth, Double inHeight, Double& outWidth, Double& outHeight)
at MS.Internal.XcpImports.MeasureOverrideNative(IntPtr element, Single inWidth, Single inHeight, Single& outWidth, Single& outHeight)
at MS.Internal.XcpImports.FrameworkElement_MeasureOverride(FrameworkElement element, Size availableSize)
at System.Windows.FrameworkElement.MeasureOverride(Size availableSize)
at System.Windows.FrameworkElement.MeasureOverride(IntPtr nativeTarget, Double inWidth, Double inHeight, Double& outWidth, Double& outHeight)
at MS.Internal.XcpImports.MeasureNative(IntPtr element, Single inWidth, Single inHeight)
at MS.Internal.XcpImports.UIElement_Measure(UIElement element, Size availableSize)
at System.Windows.UIElement.Measure(Size availableSize)
at System.Windows.Controls.VirtualizingStackPanel.MeasureChild(UIElement child, Size layoutSlotSize)
at System.Windows.Controls.VirtualizingStackPanel.MeasureOverride(Size constraint)
at System.Windows.FrameworkElement.MeasureOverride(IntPtr nativeTarget, Double inWidth, Double inHeight, Double& outWidth, Double& outHeight)
at MS.Internal.XcpImports.MeasureOverrideNative(IntPtr element, Single inWidth, Single inHeight, Single& outWidth, Single& outHeight)
at MS.Internal.XcpImports.FrameworkElement_MeasureOverride(FrameworkElement element, Size availableSize)
at System.Windows.FrameworkElement.MeasureOverride(Size availableSize)
at System.Windows.Controls.ScrollContentPresenter.MeasureOverride(Size constraint)
at System.Windows.FrameworkElement.MeasureOverride(IntPtr nativeTarget, Double inWidth, Double inHeight, Double& outWidth, Double& outHeight)
at MS.Internal.XcpImports.MeasureNative(IntPtr element, Single inWidth, Single inHeight)
at MS.Internal.XcpImports.UIElement_Measure(UIElement element, Size availableSize)
at System.Windows.UIElement.Measure(Size availableSize)
at System.Windows.Controls.ScrollViewer.MeasureOverride(Size constraint)
at System.Windows.FrameworkElement.MeasureOverride(IntPtr nativeTarget, Double inWidth, Double inHeight, Double& outWidth, Double& outHeight)
at MS.Internal.XcpImports.MeasureOverrideNative(IntPtr element, Single inWidth, Single inHeight, Single& outWidth, Single& outHeight)
at MS.Internal.XcpImports.FrameworkElement_MeasureOverride(FrameworkElement element, Size availableSize)
at System.Windows.FrameworkElement.MeasureOverride(Size availableSize)
at System.Windows.FrameworkElement.MeasureOverride(IntPtr nativeTarget, Double inWidth, Double inHeight, Double& outWidth, Double& outHeight)
at MS.Internal.XcpImports.MeasureOverrideNative(IntPtr element, Single inWidth, Single inHeight, Single& outWidth, Single& outHeight)
at MS.Internal.XcpImports.FrameworkElement_MeasureOverride(FrameworkElement element, Size availableSize)
at System.Windows.FrameworkElement.MeasureOverride(Size availableSize)
at System.Windows.FrameworkElement.MeasureOverride(IntPtr nativeTarget, Double inWidth, Double inHeight, Double& outWidth, Double& outHeight)
at MS.Internal.XcpImports.MeasureOverrideNative(IntPtr element, Single inWidth, Single inHeight, Single& outWidth, Single& outHeight)
at MS.Internal.XcpImports.FrameworkElement_MeasureOverride(FrameworkElement element, Size availableSize)
at System.Windows.FrameworkElement.MeasureOverride(Size availableSize)
at Microsoft.Phone.Controls.PivotItem.MeasureOverride(Size availableSize)
at System.Windows.FrameworkElement.MeasureOverride(IntPtr nativeTarget, Double inWidth, Double inHeight, Double& outWidth, Double& outHeight)
at MS.Internal.XcpImports.MeasureOverrideNative(IntPtr element, Single inWidth, Single inHeight, Single& outWidth, Single& outHeight)
at MS.Internal.XcpImports.FrameworkElement_MeasureOverride(FrameworkElement element, Size availableSize)
at System.Windows.FrameworkElement.MeasureOverride(Size availableSize)
at Microsoft.Phone.Controls.Pivot.MeasureOverride(Size availableSize)
at System.Windows.FrameworkElement.MeasureOverride(IntPtr nativeTarget, Double inWidth, Double inHeight, Double& outWidth, Double& outHeight)
at MS.Internal.XcpImports.UpdateLayoutNative(IntPtr element)
at MS.Internal.XcpImports.UIElement_UpdateLayout(UIElement element)
at System.Windows.UIElement.UpdateLayout()
at Microsoft.Phone.Controls.Pivot.OnItemsChanged(NotifyCollectionChangedEventArgs e)
at System.Windows.Controls.ItemsControl.OnItemCollectionChanged(Object sender, NotifyCollectionChangedEventArgs e)
at System.Windows.Controls.ItemCollection.NotifyCollectionChanged(NotifyCollectionChangedEventArgs e)
at System.Windows.Controls.ItemCollection.UpdateItemsSourceList(IEnumerable newItemsSource)
at System.Windows.Controls.ItemsControl.ItemsSourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
at System.Windows.DependencyObject.RaisePropertyChangeNotifications(DependencyProperty dp, Object oldValue, Object newValue)
at System.Windows.DependencyObject.UpdateEffectiveValue(DependencyProperty property, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, ValueOperation operation)
at System.Windows.DependencyObject.RefreshExpression(DependencyProperty dp)
at System.Windows.Data.BindingExpression.RefreshExpression()
at System.Windows.Data.BindingExpression.SendDataToTarget()
at System.Windows.Data.BindingExpression.SourceAcquired()
at System.Windows.Data.BindingExpression.System.Windows.IDataContextChangedListener.OnDataContextChanged(Object sender, DataContextChangedEventArgs e)
at System.Windows.Data.BindingExpression.DataContextChanged(Object sender, DataContextChangedEventArgs e)
at System.Windows.FrameworkElement.OnDataContextChanged(DataContextChangedEventArgs e)
at System.Windows.FrameworkElement.OnAncestorDataContextChanged(DataContextChangedEventArgs e)
at System.Windows.FrameworkElement.NotifyDataContextChanged(DataContextChangedEventArgs e)
at System.Windows.FrameworkElement.OnAncestorDataContextChanged(DataContextChangedEventArgs e)
at System.Windows.FrameworkElement.NotifyDataContextChanged(DataContextChangedEventArgs e)
at System.Windows.FrameworkElement.OnPropertyChanged(DependencyProperty dp)
at System.Windows.DependencyObject.RaisePropertyChangeNotifications(DependencyProperty dp, Object oldValue, Object newValue)
at System.Windows.DependencyObject.UpdateEffectiveValue(DependencyProperty property, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, ValueOperation operation)
at System.Windows.DependencyObject.SetValueInternal(DependencyProperty dp, Object value, Boolean allowReadOnlySet)
at System.Windows.DependencyObject.SetValueInternal(DependencyProperty dp, Object value)
at System.Windows.DependencyObject.SetValue(DependencyProperty dp, Object value)
at System.Windows.FrameworkElement.set_DataContext(Object value)
at WPUserControls.ViewModel.ItemsTypeViewModel.AddItem(ItemInstance itemInstance)
at WPUserControls.ViewModel.ItemsTypePageViewModel.AddNewItemInstance()
at WPUserControls.Views.ItemsTypePageView.AddItem()
at WPUserControls.Views.ItemsTypePageView.addIcon_Click(Object sender, EventArgs e)
at Microsoft.Phone.Shell.ApplicationBarItemContainer.FireEventHandler(EventHandler handler, Object sender, EventArgs args)
at Microsoft.Phone.Shell.ApplicationBarIconButton.ClickEvent()
at Microsoft.Phone.Shell.ApplicationBarIconButtonContainer.ClickEvent()
at Microsoft.Phone.Shell.ApplicationBar.OnCommand(UInt32 idCommand)
at Microsoft.Phone.Shell.Interop.NativeCallbackInteropWrapper.OnCommand(UInt32 idCommand)

最佳答案

我无法查明问题所在,但问题似乎不在您的模板选择器本身,而是其中一个模板。

尝试将它们中的每一个减少到基本最小值(不同颜色的文本框)或其他东西,看看它是否有效,也尝试添加其他类型的项目,看看会发生什么。

关于c# - wp7 芒果中的 DataTemplateSelector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7219829/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com