我有一个带有3个标题的ListView,在XAML中声明如下:
<ListView Name="myListView">
<ListView.View>
<GridView>
<GridViewColumn Header="H1"/>
<GridViewColumn Header="H2"/>
<GridViewColumn Header="H3"/>
</GridView>
</ListView.View>
</ListView>
Run Code Online (Sandbox Code Playgroud)
我想以编程方式将ListViewItem添加到此ListView,能够在ListViewItem中设置将分别位于第一,第二和第三列下的内容.到目前为止,我只走到这一步:
ListViewItem l = new ListViewItem();
l.Content = "Content";
myListView.Items.Add(l);
Run Code Online (Sandbox Code Playgroud)
这会将每列设置为字符串"Content".如何更改上面的代码,以便我可以添加一个ListViewItem,它将分别在第一,第二和第三列下显示"Content 1","Content 2"和"Content 3"?我试图在ListViewItem中查找SubItem或ListViewSubItem属性,但什么都没找到.
我假设有一个简单的解决方案,但也许我错了.请不要提及数据绑定,因为我只想回答以编程方式设置Content属性以反映每列中的各个更改的问题.
非常感谢你.
对于我的问题的简化版本,我想计算布局转换(可能甚至是渲染转换)形状的边界框,这样我总是能够完美地围绕形状拟合一个矩形,无论它的旋转或比例如何也许.如果你能解决这个问题,我会很高兴.
更复杂的问题是计算任何框架元素的可视边界框.通过'视觉边界框',我的意思是框架元素中最顶部的可见像素决定了上限,最右边的可见像素决定了右边界等等.如果你能解决这个问题,我会更开心.
我尝试过使用LayoutInformation.GetLayoutSlot(),但这并不是以预期的方式工作.'布局槽'实际上比实际边界大很多.我也尝试使用VisualTreeHelper.GetDescendantBounds(),但由于我的测试形状的VisualParent受到保护,我无法访问此属性,并决定在我进一步进入之前检查这里.
我希望有人可以提供一种简单的方法来获取WPF中元素的真实可视边界框,这是在所有变换之后计算的.如果我在问题中没有说清楚,请告诉我.
我试图让OpenHardwareMonitor从我的Supermicro X7DWA主板上的Winbond W83793芯片中读取温度数据.问题是我没有任何低级编程经验,并且在线可用文档似乎不足以解释如何访问温度.
但是,在我一直在研究这个问题的那个月里,我发现了一些可能是解决问题的关键值和低级方法.我只需要弄清楚如何使用它们来获得我想要的东西.这就是我转向你的地方,因为你可能会理解这些信息的含义,以及如何应用它,与我不同.我已经完成了我的公平分享,导致许多蓝屏和计算机重启.足够的猜测,我需要将这些线索拼凑在一起.这是我目前所知道的:
要从芯片读取,我将以某种方式需要访问SMBus,因为这是监视程序(如CPUID HWMonitor)获取信息的方式.据我所知,OpenHardwareMonitor没有任何代码可以访问SMBus,这就是它可能无法从芯片读取的原因.但是,OpenHardwareMonitor在其Ring0类中包含以下方法,用于访问其他芯片的信息.我可以使用这些方法对我有利:
void Ring0.WriteIOPort(uint port, byte value);
byte Ring0.ReadIOPort(uint port);
Run Code Online (Sandbox Code Playgroud)在其他信息中,HWMonitor在保存报告时向我报告有关Winbond W83793芯片的以下信息:
寄存器空间:SMBus,基址= 0x01100
SMBus请求:通道0x0,地址0x2F
看起来这些是重要的值,但我不确切地知道它们的含义,以及如何将它们与上面的Ring0方法结合使用.嗯...这么多线索.HWMonitor显示的其他值是实际电压,温度和风扇速度,以及表示芯片某处数据的十六进制值数组,如果您想查看它,我将在此处重现.
最后,在W83793数据表中,在第53页(如果您打开文档),这里是我希望阅读的温度十六进制的地址(我相信):
TD1读数 - Bank 0地址1C
TD2读数 - Bank 0地址1D
TD3读数 - Bank 0地址1E
TD4读数 - Bank 0地址1F
低位读数 - Bank 0地址22
TR1读数 - Bank 0地址20
TR2读数 - Bank 0地址21
到目前为止,这就是我所知道的.OpenHardwareMonitor,W83793芯片和Ring0代码可通过上面提供的链接获得.正如我之前所说的那样,我已经有一个月了,我还没有能够解决这个谜团.我希望你能帮助我.所有这些信息可能看起来有点令人生畏,但我确信这对具有一些低级编程经验的人来说是有意义的.
总结一下我的问题,使用上面提供的线索来弄清楚如何让OpenHardwareMonitor读取W83793芯片的温度.我不需要在OpenHardwareMonitor中创建芯片的细节.我已准备好上课了.我只需要序列和格式来编写Ring0命令,如果这是我需要做的.
编辑:我发现了一些更多的信息.我从HWMonitor打印了一个SMBus设备报告,除此之外,我得到了这一行,包括在这里因为它说0x2F:
SMB设备:I/O = 0x1100,地址0x2F,通道= 0
这必然意味着我需要以某种方式将I/O的地址与芯片的地址组合在一起,这似乎是0x2F.我尝试将它们加在一起然后我得到所有温度读数为255,所以这不是正确的猜测.
假设我已经使用XAML中定义的以下ContentTemplate创建了一个UserControl:
<UserControl.ContentTemplate>
<DataTemplate>
<Ellipse Name="myEllipse" Stroke="White"/>
<ContentPresenter Content="{TemplateBinding Content}"/>
</DataTemplate>
</UserControl.ContentTemplate>
Run Code Online (Sandbox Code Playgroud)
我如何访问我的代码中的"myEllipse"元素,以便,例如,我可以用"myEllipse.Height"找到它的高度?我无法直接通过名称访问它.我尝试使用以下方法创建对它的引用:
Ellipse ellipse = ContentTemplate.FindName("myEllipse",this) as Ellipse;
Run Code Online (Sandbox Code Playgroud)
它在我运行程序时崩溃,说它无法创建我的类的实例.也许我没有正确使用FindName.如果有人可以帮助我,我将不胜感激.
谢谢,
达拉尔
我完全没有关于硬件寄存器的经验或知识,以及如何通过代码与它们进行交互.但是,我目前的C#项目要求我从SMBus上的芯片读取温度,我想我将不得不弄脏手.如果您想知道,温度传感器是Winbond W83793G.
我还有很长的路要走,但我首先看一下第5页的这篇文章:smbus.org/specs/smbb10.pdf
似乎完成我的任务的第一步是写入以下硬件寄存器:AX,BH,BL,CH,CL,并从以下读取返回值:Carry,AH,AL,BL,CH,CL,DX .使用此功能,我可以确定"SMBus BIOS接口"是否可用.更重要的是,如果我可以在C#中管理这么多,我可以按照其余的文档最终从Winbond W83793G中读取并从温度传感器中提取出我想要的值.不,OpenHardwareMonitor目前不支持SMBus,所以我不能将其用于代码.
总之,我的基本问题是:使用C#读取和写入硬件寄存器的简单有效方法是什么?
另外,如果你可以提供有关我从芯片读取的具体问题的任何反馈,这对我来说是一个奖励,我非常感激!
最近,我注意到,在我的数据库中存储所产生的身份时,谷歌有时会返回一个不同的身份为同一个用户,造成两人数据库条目为单个用户.
经过一番研究后,我发现Google使用$ openid-> realm以及用户名来创建身份.默认情况下,领域成为您网站的URL.使用LightOpenID,我应该将$ openid-> realm设置为使得生成的Google身份保持一致,以便我可以将它们存储在我的数据库中?我可以将'领域'设置为我喜欢的任何东西吗?或者它必须与我的URL相关?
我有一个用户控件,其中包含网格内的交互式元素。用户可以移动和调整这些元素的大小,通常会使它们超出我的控件的范围。当元素确实落在外面时,我不希望它们被裁剪。我希望它们无论如何都可见。不幸的是,将ClipToBounds设置为FALSE并不能解决问题。
即使在过去的类似情况下,我也使用过ClipToBounds,尽管起初似乎可以使用,但我注意到,越界元素在拖动到某些位置时偶尔会消失。关于它们为什么消失的说法似乎没有逻辑上的解释,只是布局系统可能会优先考虑将ClipToBounds设置为false(仅在某些位置)。
这很烦人,而且我的变通办法涉及以编程方式不断调整UserControl的大小以包围所有内部元素,这似乎是一种非常糟糕的方法。有没有一种更清洁的方法来确保我的元素始终在控件的边界之外可见(最好不使用ClipToBounds-我是否在这里缺少属性)?任何帮助是极大的赞赏。
我正在使用带有C#的Npgsql与我的PostgreSQL数据库进行通信.我的数据库中使用的所有名称都是大小写混合,因此在查询中我确保在每个名称周围使用双引号.以下是我发送查询的方式:
// construct an insert query
string insertQuery = "insert into \"Update\" (\"Vehicle\",\"Property\",\"Value\") " +
"values (" + vehicleNum.ToString() + ",\"" + propertyName +
"\",\"" + propertyValue + "\")";
// execute the query
NpgsqlCommand insertCommand = new NpgsqlCommand(insertQuery, conn);
insertCommand.ExecuteScalar();
Run Code Online (Sandbox Code Playgroud)
通过插入断点并进行检查,我验证了字符串insertQuery在发送之前看起来是这样的:
insert into "Update" ("Vehicle","Property","Value") values (12345,"EngineSpeed","50")
Run Code Online (Sandbox Code Playgroud)
当我发送这个查询时,PostgreSQL给了我一个错误,它包含在一个Npgsql异常中,该异常指出: ERROR: 42703: column "EngineSpeed" does not exist
从我的查询中可以看出,EngineSpeed它不是列,它是列的值Property,因此具有该名称的列自然不可能存在.那么为什么PostgreSQL以这种方式处理我的查询,我该如何解决这个问题呢?我的查询是否以错误的方式构建?
我必须有x:y格式的字符串,其中x和y必须是五位数(零填充)和x <= y.
例:
00515:02152
Run Code Online (Sandbox Code Playgroud)
Regex会匹配这种格式?
如果可能,请简要解释一下解决方案,以帮助我学习.
编辑:为什么我需要正则表达式?我编写了一个通用工具,它根据配置文件获取输入并验证它.弹出一个意外的要求,要求我以我显示的格式验证字符串(使用配置文件).我希望使用我编写的现有配置框架来解决这个问题,因为拆分和解析将超出此工具的范围.对于像这样的一个突出的要求,我不介意有一些非正统/凌乱的正则表达式,只要它不是10000行长.任何使用Regex的智能解决方案都表示赞赏!谢谢.
对于我网站上的AJAX,我从Javascript文件调用something.php?request = bla.我不希望用户查看此请求的结果,甚至不要通过输入www.myurl.com/something.php?request=bla来运行PHP文件.我只希望我的服务器上的文件能够调用PHP文件.我考虑过很多事情,例如在PHP脚本本身中进行比较的秘密值,但这听起来太复杂了.我相信有一种更简单的方法.
如何使PHP文件只能在服务器上存在的脚本调用它时才能运行?用户不应该使用他们的地址栏来运行它.
c# ×6
wpf ×4
hardware ×2
php ×2
bus ×1
clipping ×1
grid ×1
html ×1
javascript ×1
lightopenid ×1
listviewitem ×1
monitoring ×1
npgsql ×1
open-source ×1
openid ×1
postgresql ×1
realm ×1
regex ×1
wpf-controls ×1