我刚刚开始加速WPF,并希望创建一个可重用的WPF控件.
当我查看在Visual Studio中创建项目的选项时,我看到"WPF用户控件库"和"WPF自定义控件库".我不清楚他们之间的区别是什么,我的谷歌搜索没有找到任何体面的解释.
我想了解它们之间的差异,理想情况下看一些何时使用一个而不是另一个的例子.
我试图在C++程序中添加一个定时延迟,并想知道是否有人对我可以尝试的内容或我可以看到的信息有任何建议?
我希望我有更多关于如何实现这个定时延迟的细节,但在我有关于如何添加定时延迟的更多信息之前,我不确定我应该如何尝试实现它.
在C++ Boost库中,为什么某些头文件中有".ipp"扩展名?
它们似乎是同名".hpp"文件中包含的头文件.
这个惯例在Boost之外是否常见?
拥有特殊文件类型的理由是什么?
假设a
并且b
都是类型int
,并且b
非零.考虑a/b
在以下情况下执行的结果:
a
并且b
都是非负的.a
并且b
都是消极的.在案例1中,结果向下舍入到最接近的整数.但标准对案例2和案例3有什么看法?我发现在互联网上浮动的旧草案表明它是依赖于实现的(是的,甚至是案例2),但委员会倾向于使其始终"向零舍入".有谁知道(最新)标准说的是什么?请仅根据标准回答,而不是有意义的回答,或者特定的编译器做什么.
我有一个.NET库,我需要在其中找到所有具有我在其上定义的自定义属性的类,并且我希望能够在应用程序使用我的库时即时找到它们(即 - 我不想在某个地方配置文件,我说明要查看的程序集和/或类名).
我在看,AppDomain.CurrentDomain
但我并不过分熟悉它,并且不确定这些权限需要多少(我希望能够以尽可能少的信任在Web应用程序中运行库,但信任度越低越快乐我会).我还想记住性能(这是一个.NET 3.5库,所以LINQ完全有效!).
那么这是AppDomain.CurrentDomain
我最好/唯一的选择,然后循环遍历所有程序集,然后键入这些程序集?还是有另一种方式
我有以下XAML:
<TextBlock Text="{Binding ElementName=EditListBox, Path=SelectedItems.Count}" Margin="0,0,5,0"/>
<TextBlock Text="items selected">
<TextBlock.Style>
<Style TargetType="{x:Type TextBlock}">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=EditListBox, Path=SelectedItems.Count}" Value="1">
<Setter Property="TextBlock.Text" Value="item selected"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
Run Code Online (Sandbox Code Playgroud)
第一个文本块愉快地使用SelectedItems.Count更改,显示0,1,2等.第二个块上的数据触发器似乎永远不会触发更改文本.
有什么想法吗?
我目前正在研究一个非常大的传统MFC MDI应用程序.它有大量的UI元素 - 可停靠的工具栏,自定义树控件,上下文菜单等.它是一个图像处理应用程序,因此主视图使用DirectX和OpenGL自我渲染.该产品大约有10年的历史,其中一个优先事项是更新它的外观和感觉.
知道微软在提供C++/MFC和.NET之间的互操作性方面做得很好,我认为以递增方式迁移代码库是有意义的.我现在正在努力的是从哪里开始.
一种方法是使用WPF删除MFC框架并尽可能多地重用C++代码.这将让我们最大限度地发挥WPF架构的优势,但这将意味着一个漫长的开发周期,直到我们再次完全正常运行.
另一种方法是用它们的WPF对应物一次替换一个MFC控件.这将允许我们以增量方式工作.我对这种方法的关注是,它意味着托管和非托管代码之间会有很多连接点,我不知道从哪里开始替换主菜单和工具栏等内容.
或者我还有其他选择吗?
任何有关此主题的信息的建议或链接将不胜感激.
更新: DavidK提出了一些很好的问题,所以我添加了这背后的动机.
1)产品的未来发展
该产品仍在积极开发中,并定期添加新功能.我认为尝试慢慢迁移到C#/ WPF会很有意义.凭借我在C#/ WPF方面的有限经验,我发现在C++/MFC中工作效率会提高.
我们用WPF获得的另一件大事就是能够利用多头系统.MFC应用程序仅限于单个顶级框架,因此很难利用多个监视器.
2)员工保留和招聘
找到愿意使用MFC的开发人员越来越难了.对于当前开发人员的职业发展而言,接触新技术也很重要.
我有一个列表框,其中的项目包含复选框:
<ListBox Style="{StaticResource CheckBoxListStyle}" Name="EditListBox">
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox Click="Checkbox_Click" IsChecked="{Binding Path=IsChecked, Mode=TwoWay}" Content="{Binding Path=DisplayText}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,当我单击复选框或其内容时,父ListBoxItem不会被选中.如果单击复选框旁边的空白区域,则会选中ListBoxItem.
我想要获得的行为是能够在列表中选择一个或多个项目,并使用空格键来打开和关闭复选框.
更多信息:
private void Checkbox_Click(object sender, RoutedEventArgs e)
{
CheckBox chkBox = e.OriginalSource as CheckBox;
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,当我单击一个复选框时,e.Handled为false并且chkBox.Parent为null.
肯特的回答让我走上了正确的道路,这就是我最终的结果:
<ListBox Style="{StaticResource CheckBoxListStyle}" Name="EditListBox" PreviewKeyDown="ListBox_PreviewKeyDown">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding Path=IsChecked, Mode=TwoWay}" />
<TextBlock Text="{Binding DisplayText}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Run Code Online (Sandbox Code Playgroud)
我必须使用PreviewKeyDown,因为默认情况下,当您点击列表框中的空格键时,它会取消选择除最近选择的项目之外的所有内容.