在WPF中,当我右键单击树视图项时,我希望在显示上下文菜单之前选择/激活它.
这听起来很简单,但是包含hierachicalDataTemplate会使事情变得复杂.
我有以下树视图:
<TreeView
x:Name="trv"
ContextMenu="{StaticResource contextMenu}"
ItemTemplate="{StaticResource treeHierarchicalDataTemplate}"
ItemsSource="{Binding Source={StaticResource meetingItems}}" >
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<EventSetter Event="TreeViewItem.PreviewMouseRightButtonDown" Handler="trv_PreviewMouseRightButtonDown"/>
<Setter Property="IsExpanded" Value="True"></Setter>
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
Run Code Online (Sandbox Code Playgroud)
这是我的事件处理程序......
private void trv_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
TreeViewItem item = sender as TreeViewItem;
if (item != null)
{
item.Focus();
e.Handled = true;
}
}
Run Code Online (Sandbox Code Playgroud)
请注意我如何添加上面的EventSetter.这个ALMOST有效.但它只选择根级树视图节点(即我右键单击的节点的根父节点).这可能是因为我的分层数据模板?此模板可以包含相同类型的子项.
这是我的分层数据模板......
<HierarchicalDataTemplate x:Key="treeHierarchicalDataTemplate"
ItemsSource="{Binding Path=ChildMeetingItems}">
<HierarchicalDataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=Red}" Value="True">
<Setter TargetName="img" Property="Image.Source" Value="pack://siteoforigin:,,,/images/bookRed.png"></Setter>
</DataTrigger>
</HierarchicalDataTemplate.Triggers>
<StackPanel
x:Name="treeViewItemPanel"
Background="Transparent"
Orientation="Horizontal">
<Image Width="16" Height="16" x:Name="img" Margin="0,0,4,0" Source="pack://siteoforigin:,,,/images/bookGreen.png"></Image>
<TextBlock Foreground="DarkGray" …Run Code Online (Sandbox Code Playgroud) 代码一直在运作.不知怎的,我设法让Visual C++ Express没有达到最终return语句的断点,它似乎永远运行.
在下面的示例代码中,EnumWindows无限枚举.如何在枚举所有窗口后使其停止.
#include <Windows.h>
BOOL CALLBACK EnumWindowsProc(HWND hWnd, long lParam) {
TCHAR buff[255];
if (IsWindowVisible(hWnd)) {
GetWindowText(hWnd, (LPWSTR) buff, 254);
printf("%S\n", buff);
}
return TRUE;
}
int _tmain(int argc, _TCHAR* argv[]) {
EnumWindows(EnumWindowsProc, 0);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我们正在使用的内容即自动完成的jQuery插件乔恩Zaefferer,并试图验证有效的选项输入.
该插件具有result()事件,该事件在进行选择时触发.这没关系,但是当用户点击时我需要检查文本框中的值.所以我们尝试了.change()和.blur()事件,但它们都存在问题:当你点击结果div中的一个条目('suggest'列表)时,.change()和.blur()事件触发,这是在插件向文本框写入值之前,因此此时无需验证.
有人可以帮我配置事件,所以每当有人点击,但不是在结果框中我可以检查框中的有效值.如果这是错误的方法,请通知我正确的方法.我们最初使用此插件是因为它的'mustMatch'选项.此选项似乎并不适用于所有情况.很多时候,有效的条目将被写入文本框,而被插件清除为无效,我无法确定原因.
基本代码示例:
<html>
<head>
<title>Choose Favorite</title>
<script language="JavaScript" src="jquery-1.3.2.min.js" ></script>
<script language="JavaScript" src="jquery.autocomplete.min.js" ></script>
<script>
$(".suggest").autocomplete("fetchNames.asp", {
matchContains:false,
minChars:1,
autoFill:false,
mustMatch:false,
cacheLength:20,
max:20
});
$(".suggest").result(function(event, data, formatted) {
var u = this;
// Check value here
});
/* OR */
$(".suggest").change(function(me) {
//check value here
});
</script>
</head>
<body>
<label for="tbxName">Select name (I show 10):</label><br />
<INPUT type="text" id="tbxName" name="tbxName" class="suggest"><br />
</body>
</html>
Run Code Online (Sandbox Code Playgroud) 我正在使用Visual Studio 2008来设计SQL Server Compact Edition数据库(*.sdf).我不得不更改我的一个表格的架构,添加一个新列.
我想将新列从底部"移动"到字段列表中的不同位置.我如何在Visual Studio设计器中执行此操作?
编辑:我知道从纯粹的技术角度来看,列的顺序无关紧要.我正在为一个应用程序进行原型设计,所以我必须多次更改模式.例如,如果我必须更改主键,那么在最后使用最重要的列会"丑陋".我认为,其他看待代码的开发人员会感到困惑.这是一个美学问题.
我正在我的个人计算机上编写一个脚本,该脚本连接到远程服务器.我认为远程服务器安装了Perl 4.0或更低版本,这就是它无法识别相同的原因.有chomp命令的替代方案吗?
是否有单表达式方法将标量分配给boost矩阵或向量的所有元素?我正试图找到一种更紧凑的表达方式:
boost::numeric::ublas::c_vector<float, N> v;
for (size_t i=0; i<N; i++) {
v[i] = myScalar;
}
Run Code Online (Sandbox Code Playgroud)
以下不起作用:
boost::numeric::ublas::c_vector<float, N>
v(myScalar, myScalar, ...and so on..., myScalar);
boost::numeric::ublas::c_vector<float, N> v;
v = myScalar;
Run Code Online (Sandbox Code Playgroud) 看看这个示例函数:
RuntimeConfiguration* conf_rt_conf() {
RuntimeConfiguration *conf;
conf = new RuntimeConfiguration();
conf->arch_path="./archive";
conf->err_log="./err_log";
conf->fail_log="./fail_log";
conf->msg_log="./msg_log";
conf->save="html, htm, php";
conf->ignore="jpg, gif";
conf->cookies="";
return conf;
}
Run Code Online (Sandbox Code Playgroud)
这里的一切都很好,但是当我运行这样的东西:
DatabaseInput** conf_db_input() {
DatabaseInput **db_input;
db_input=(DatabaseInput **)malloc(NUMB_SITES*sizeof(DatabaseInput *));
for (int i=0;i<NUMB_SITES;i++) db_input[0]= new DatabaseInput();
db_input[0]->full_name="ABCNews";
db_input[0]->alias="abcn";
db_input[0]->prefix="/eng";
db_input[1]->full_name="Rzeczpospolita";
db_input[1]->alias="rp";
db_input[1]->prefix="/pol";
return db_input;
}
Run Code Online (Sandbox Code Playgroud)
我在第一次分配时遇到分段错误.它可能与为此结构分配的固定内存块有关.如何让它正常工作?
我向Outlook发送了一条vCalendar消息,导致Outlook日历中出现了一个新事件.如何设置"显示为"字段?(忙/闲/暂定/离任)
您好我在ViewController.h中有以下代码:
#import <UIKit/UIKit.h>
@interface CalcViewController : UIViewController {
NSNumber* result;
NSString* input;
//NSString* input = @"";
IBOutlet UITextField* display;
}
@property (retain) NSNumber* result;
@property (retain) NSString* input;
@property (nonatomic, retain) UITextField* display;
@end
Run Code Online (Sandbox Code Playgroud)
问题是我想在输入中附加一个字符串,但是当它仍为空时这是不可能的.这就是为什么我想将输入的默认值设置为@"".但是我在哪里放这个代码.
我知道一个可能的解决方案,你把它放在一个默认的构造函数中.但我不知道在哪个文件中放这个.我应该在哪里打电话.
遗憾的是,我对C的理解有限,并且意识到也许.h文件不是正确的地方.
如果您需要,项目类型是基于视图的应用程序.
希望你能帮忙.
[编辑]
我的原始问题是"为什么要在静态和非静态之间做出决定?两者都是一样的......"
不幸的是,它被编辑成一个C#特定的问题,我真的想避免.
所以,让我做一些补充:
当我说接口时,我不是指C#-keyword接口,而是我理解的东西,比如C++接口:一组定义良好的函数来操作我的对象.当说削弱我的界面时,我的意思是我有不同的功能(静态/非静态)做同样的事情.当有不同的功能来做同样的事情时,我的界面不再明确定义.
所以,正如看门人Bob发布的那样,我可以实现一个Validate()函数
Document.Validate(myDocumentObject);
Run Code Online (Sandbox Code Playgroud)
但是也
myConcreteDocumentObject.Validate();
Run Code Online (Sandbox Code Playgroud)
要返回我的Copy() - 示例可以实现Copy()之类的
myConcreteDocument.Copy(toPath);
Run Code Online (Sandbox Code Playgroud)
但是也
Document.Copy(myConcreteDocumentObject, toPath)
Run Code Online (Sandbox Code Playgroud)
要么
Document.Copy(fromPath, toPath)
Run Code Online (Sandbox Code Playgroud)
当我想到一个文件夹,其中包含属于我的Document的所有文件(在这种情况下,我不依赖于具体的实例 - 但我依赖于其他东西:)).
一般来说,我说的是静态方法,而不是静态类(对不起,如果我忘了推荐).
但正如Anton Gogolev所说,我认为我的文档课不是一个很好的例子而且没有很好的设计,所以我想我必须看看单一责任原则.
我还可以实现某种与DocumentClass一起运行的ManagerClass:
例如:
myDocumentManagerObject.Copy(myConcreteDocumentObject, toPath);
Run Code Online (Sandbox Code Playgroud)
要么
myDocumentManagerObject.Copy(myConcreteDocumentObject, toPath);
Run Code Online (Sandbox Code Playgroud)
但是,如果我参考方法1)我倾向于创建自己执行任务的对象,而不是使用我的DocumentObject 执行某些操作的其他对象(DocumentManager).
(我希望这不会采取关于OOP的宗教讨论的方向;).)
[/编辑]
起初这似乎是一个非常基本的问题,比如"何时使用静态方法,何时不使用",但这是我偶尔遇到的问题(我很难描述真正的问题是什么;也许只是为了得到原因(不)使用1)或为什么(不)使用2)).
(虽然我使用的是C#-Syntax但这不是C#限制的问题)
在OOP中,有两种处理对象的方法(以及其他方法):
1)如果我想要我的对象做某事,我只是告诉他这样做:
myConcreteObject.DoSomething();
Run Code Online (Sandbox Code Playgroud)
这就像和一个对象交谈一样.
2)或者如果你是静态方法的粉丝:
ObjectClass.JustDoIt();
Run Code Online (Sandbox Code Playgroud)
在某种程度上,我认为静态函数只是"感觉"更好.所以我倾向于经常使用静态方法(独立于具体实例 - 独立性总是好事).
所以,在设计课程时,我经常要决定是采用方法1)还是方法2):
想象一下,你有一个"文档"类,它应该代表一个应该保存到数据库中的文档:
一个文件
现在我遇到了几种创建这个类的方法:
//----- 1) non static approach/talking to objects -----
Document newDocument = new Document();
// Copy document to x (another …Run Code Online (Sandbox Code Playgroud) c++ ×3
autocomplete ×1
boost ×1
c# ×1
calendar ×1
class-design ×1
constructor ×1
database ×1
expression ×1
iphone ×1
jquery ×1
objective-c ×1
oop ×1
outlook ×1
perl ×1
perl4 ×1
properties ×1
syntax ×1
treeview ×1
treeviewitem ×1
ublas ×1
vcalendar ×1
winapi ×1
windows ×1
wpf ×1