我开发了一个WPF应用程序,当我在调试模式下启动它时,我在输出中看到以下内容:
'WpfApplication1.vshost.exe'(Managed(v2.0.50727)):已加载'C:\ WINDOWS\assembly\GAC_MSIL\System.Deployment\2.0.0.0__b03f5f7f11d50a3a\System.Deployment.dll',已加载符号.System.Deployment.dll中发生类型为"System.Deployment.Application.InvalidDeploymentException"的第一次机会异常附加信息:未设置应用程序标识.
如果我在另一个WPF应用程序中使用此应用程序中的控件,则输出中有7个此类消息.不过,该应用程序运行正常.
你能解释一下抛出这些异常的原因吗?我发现该方法ApplicationDeployment.get_CurrentDeployment
引发了它们.在MSDN中写道,当您"试图从非ClickOnce应用程序调用此静态属性时"出现此异常.我无法理解它的含义.
我发现类似的帖子InvalidDeploymentException - 没有设置应用程序标识但是没有这个问题的答案.
我写了简单的代码
public ObservableCollection<string> Names …
public Window1()
{
PutInDataIntoNames();
InitializeComponent();
this.listBox1.ItemsSource = Names;
}
Run Code Online (Sandbox Code Playgroud)
并在xaml
<Grid>
<ListBox Margin="10,11,10,16"
Name="listBox1"
Background="Black"
Foreground="Orange"
/>
</Grid>
Run Code Online (Sandbox Code Playgroud)
然后我想在xaml中设置ItemsSource属性.为了做到这一点,我写了以下内容:
ItemsSource="{Binding Path=Names}"
Run Code Online (Sandbox Code Playgroud)
不幸的是,它不起作用.你能解释为什么以及如何做到这一点吗?
我有一个ListBox,显示MyObjects的集合.该集合位于ViewModel中.我想处理ListItem上的按钮单击,但绑定有一些麻烦.如果属性绑定到MyObject属性,DataTemplate中的绑定可以正常工作.但是如何将它从ViewModel绑定到属性?
第二个问题我如何使用处理点击事件的代码中的项目信息.例如,我想从项目的TextBox中打印出文本.
代码是这样的:
<Window.Resources>
<DataTemplate x:Key="ItemTemplate">
<Button Content="{Binding .}"
Command="{Binding ClickCommand}" /> <!--It doesn't work-->
</DataTemplate>
</Window.Resources>
<ListBox x:Name="ListBox"
ItemsSource="{Binding Path=Objects}"
IsSynchronizedWithCurrentItem="True"
ItemTemplate="{StaticResource ItemTemplate}"/>
Run Code Online (Sandbox Code Playgroud)
C#:
public partial class MainWindow : Window
{
VM m_vm;
public MainWindow()
{
m_vm = new VM();
this.DataContext = m_vm;
InitializeComponent();
}
}
public class VM
{
ObservableCollection<string> _objects;
public ObservableCollection<string> Objects
{
get { return _objects; }
set { _objects = value; }
}
public VM()
{
_objects = new ObservableCollection<string>();
Objects.Add("A");
Objects.Add("B");
Objects.Add("C");
} …
Run Code Online (Sandbox Code Playgroud) 在SSE中有一个函数_mm_cvtepi32_ps(__m128i input)
,它接受32位宽的有符号整数(int32_t
)的输入向量并将它们转换为float
s.
现在,我想将输入整数解释为未签名.但是没有功能_mm_cvtepu32_ps
,我找不到一个实现.你知道我在哪里可以找到这样的功能,或者至少对实现有所暗示吗?为了说明结果的差异:
unsigned int a = 2480160505; // 10010011 11010100 00111110 11111001
float a1 = a; // 01001111 00010011 11010100 00111111;
float a2 = (signed int)a; // 11001110 11011000 01010111 10000010
Run Code Online (Sandbox Code Playgroud) 我尝试使用Json.net解析简单的JSON
string inputJson = @"
{
""modificationTime"" : ""\/Date(1224043200000)\/""
}";
Run Code Online (Sandbox Code Playgroud)
财产是定义的
[JsonProperty("modificationTime")]
[JsonConverter(typeof(JavaScriptDateTimeConverter))]
public DateTime ModificationTime { get; set; }
Run Code Online (Sandbox Code Playgroud)
但DeserializeObject使用以下消息抛出异常:"解析日期时出现意外的标记或值.令牌:日期,值:10/15/2008 04:00:00"
好吧,据我所知它实际上已经解析了日期,不是吗?从JavaScriptDateTimeConverter.cs中的第68行抛出此异常:
68 if (reader.TokenType != JsonToken.StartConstructor || string.Compare(reader.Value.ToString(), "Date", StringComparison.Ordinal) != 0)
69 throw new Exception("Unexpected token or value when parsing date. Token: {0}, Value: {1}".FormatWith(CultureInfo.InvariantCulture, reader.TokenType, reader.Value));
70
71 reader.Read();
Run Code Online (Sandbox Code Playgroud)
在这个地方reader.TokenType是Date和reader.Value.ToString()是10/15/2008 04:00:00.有任何想法吗?
我正在使用 OpenNI 和 OpenCV(但没有支持 openni 的最新代码)。如果我只是将深度通道发送到屏幕 - 它会看起来很暗并且难以理解。所以我想以一种颜色为用户显示一个深度通道,但无法找到如何在不损失准确性的情况下做到这一点。现在我这样做:
xn::DepthMetaData xDepthMap;
depthGen.GetMetaData(xDepthMap);
XnDepthPixel* depthData = const_cast<XnDepthPixel*>(xDepthMap.Data());
cv::Mat depth(frame_height, frame_width, CV_16U, reinterpret_cast<void*>(depthData));
cv::Mat depthMat8UC1;
depth.convertTo(depthMat8UC1, CV_8UC1);
cv::Mat falseColorsMap;
cv::applyColorMap(depthMat8UC1, falseColorsMap, cv::COLORMAP_AUTUMN);
depthWriter << falseColorsMap;
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,我得到的输出比 Windows 的 kinects 软件显示的更糟糕(丢失细节)。所以我正在寻找 OpenNI 或 OpenCV 中具有更好转换的函数。
我有一个类向导,它使用在同一项目中定义的页面创建向导。PageViewModel与PageView是分开的。PageViewModel是从PageViewModelBase抽象类派生的普通C#类,而PageView是UserControl。为了定义PageViewModel和PageView之间的映射,我为项目中的每个页面编写了以下代码:
<Window.Resources>
<DataTemplate DataType="{x:Type OurNewPageViewModel}">
<OurNewPageView />
</DataTemplate>
</Window.Resources>
Run Code Online (Sandbox Code Playgroud)
现在,我想在用户代码调用向导的构造函数时向向导添加页面。这意味着将Pages View和ViewModel移到用户端。例如,为了用一页创建一个向导,用户将编写以下代码:向导usersWizard = new Wizard(new usersViewModel(),new userView()); 问题是我不知道如何在构造函数中提供viewModel和View之间的映射。据我了解,我可以使用两种不同的方法来解决此问题。首先,要使用FrameworkElementFactory,但以下代码将不起作用:
//let we have WelcomePageView wpview and WelcomePageViewModel wpviewmodel
FrameworkElementFactory fef = new FrameworkElementFactory(wpview.GetType());
DataTemplate dt = new DataTemplate();
dt.DataType = wpview.GetType();
dt.VisualTree = fef;
base.Resources.Add(wpviewmodel.GetType(), dt);
Run Code Online (Sandbox Code Playgroud)
其次,使用XamlReader。我可以使用它创建一个数据模板,但是我不知道如何将其附加到资源上。
你知道visual studio的加载项,它为C#项目增加了属性吗?csproj文件格式非常强大,但只能通过标准属性页面更改少量选项.例如,我想要有几个配置,每个配置都应该包含它自己的引用.或者我只想将项目类型从winforms更改为wpf或其他类型.为了做这样的事情,开发人员必须在文本编辑器中手动编辑csproj而不是使用属性.如果你知道这样的加载项不存在,你认为它可能在codeplex上流行吗?或者只有少量开发人员需要它?你有什么意见?
我有一些代码写给MS VC++ 10的代码.我使用C++ 11,特别是像
std::function<int (int)> f =...;
auto it = v.begin();
for_each(it1, it2,[&](int& i) { ++i;});
Run Code Online (Sandbox Code Playgroud)
现在我用llvm&clang尝试MacOS和XCode,我的代码无法编译!问题是为什么?也许,我将指定一个使用c ++ 11的选项.在这种情况下,我在哪里可以在xcode中修复它?
我可以创建参数化控件模板,即创建可能包含不同控件的控件模板.例如,我可以使用带有标签或按钮的控制模板 - 无论我想要什么位置.
<ControlTemplate x:Key="MessageCTemplate">
<Grid …>
<Rectangle …/>
<Rectangle …/>
<Rectangle …/>
…
<!--I want to have here button, label or whatever I want-->
<label x:Name=”MsgLabel”>
<Grid/>
<Style x:Key="MsgStyle" TargetType="{x:Type Button}">
<Setter Property="Opacity" Value="0.6" />
<Setter Property="Template" Value="{StaticResource MessageCTemplate}" />
<Style/>
Run Code Online (Sandbox Code Playgroud)
我不喜欢编写相同的控件模板,它们的代码中只有一个不同的字符串.或者,也许,我误解了smth,另一种避免复制过去的方式存在.
我有一个TabControl,显示我的ViewModel的集合.ViewModel和View之间的映射由DataTemplate实现.我使用MVVM但没有PRISM(由于历史原因).ViewModel的Base类有一个Load
加载信息的方法.我想要做的是仅在选择与当前ViewModel相对应的TabItem(延迟加载)时调用此方法.有任何想法吗?PS我找到了类似问题的答案 - 懒惰加载WPF标签内容 但我无法理解如何在MVVM中使用方法2.