有没有办法捕获WPF TextBox(System.Windows.Controls.Textbox)中的向上/向下箭头键并允许它们更改文本?我已经阅读过关于覆盖ProcessCmdKeyWindows Forms TextBox(System.Windows.Forms.TextBox)的方法,并且它工作正常,但这TextBox并不像WPF那样灵活.是否有类似的方法来实现这一点,而无需使用旧的Windows窗体TextBox?
对于我的例子,我有一个TextBox,它有一个数字文本掩码.我希望能够使用向上和向下箭头键增加/减少数值.
我试图TextBox在DatePicker控件中使用自定义,但我无法将日期从弹出日历绑定到TextBox.DatePicker除非我必须,我不想要整个风格,并且它DatePickerTextBox有自己的控制权,所以必须有一种方法来改变它.下面的代码就是我的开头:
<Style TargetType="{x:Type DatePickerTextBox}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DatePickerTextBox}">
<TextBox x:Name="PART_TextBox" Text="{Binding Path=SelectedDate}" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)
我可能没有正确地进行绑定,或者PART_TextBox可能不正确,因为它不是DatePicker模板本身的一部分.
有人请帮忙!:)
提前致谢!
好的,我有一个加载动画,在填充大型DataTable时运行,让用户知道程序没有冻结.我有动画工作正常,但它也冻结了DataTable也在更新.有没有办法拥有多个UI线程,以便在DataTable加载信息时动画将继续运行?
编辑:当前代码如下.
private void CreateFileTable()
{
file_data = new DataSet();
data_table = new DataTable();
file_data.Tables.Add(data_table);
DataColumn tempCol = new DataColumn("File Name", typeof(string));
data_table.Columns.Add(tempCol);
tempCol = new DataColumn("Ext", typeof(string));
data_table.Columns.Add(tempCol);
tempCol = new DataColumn("Size", typeof(string));
data_table.Columns.Add(tempCol);
tempCol = new DataColumn("Created", typeof(Label));
data_table.Columns.Add(tempCol);
tempCol = new DataColumn("Modified", typeof(Label));
data_table.Columns.Add(tempCol);
tempCol = new DataColumn("Accessed", typeof(Label));
data_table.Columns.Add(tempCol);
tempCol = new DataColumn("Location", typeof(string));
data_table.Columns.Add(tempCol);
File_List.ItemsSource = file_data.Tables[0].DefaultView;
}
private void PopulateDirectories(string[] directories)
{
for (int i = 0; i < directories.Length; i++)
{
DirectoryInfo tempDirInfo …Run Code Online (Sandbox Code Playgroud) 我在尝试从C#中的WebBrowser获取文档标题时遇到问题.它在VB.NET中运行良好,但它不会给我任何C#属性.
当我输入MyBrowser.Document时.,我得到的唯一选项是4种方法:Equals,GetHashCode,GetType和ToString - 没有属性.
我认为这是因为我必须首先将文档分配给新实例,但我找不到VB.NET中存在的HTMLDocument类.
基本上我想要做的是每次WebBrowser加载/重新加载页面时返回Document.Title.
有人可以帮忙吗?非常感谢!
这是我目前的代码......
private void Link_Click(object sender, RoutedEventArgs e)
{
WebBrowser tempBrowser = new WebBrowser();
tempBrowser.HorizontalAlignment = HorizontalAlignment.Left;
tempBrowser.Margin = new Thickness(-4, -4, -4, -4);
tempBrowser.Name = "MyBrowser";
tempBrowser.VerticalAlignment = VerticalAlignment.Top;
tempBrowser.LoadCompleted += new System.Windows.Navigation.LoadCompletedEventHandler(tempBrowser_LoadCompleted);
tempTab.Content = tempBrowser; // this is just a TabControl that contains the WebBrowser
Uri tempURI = new Uri("http://www.google.com");
tempBrowser.Navigate(tempURI);
}
private void tempBrowser_LoadCompleted(object sender, EventArgs e)
{
if (sender is WebBrowser)
{
MessageBox.Show("Test");
currentBrowser = (WebBrowser)sender;
System.Windows.Forms.HtmlDocument tempDoc …Run Code Online (Sandbox Code Playgroud) 好的,这让我疯了.我花了好几个小时试图找出应该是一个简单的解决方案,但我没有运气.
我在XAML页面上有一个[WPF Toolkit] DataGrid,它有一个DataTable作为其ItemsSource.我的页面上还有一个按钮,它获取DataGrid的SelectedIndex(选定行),并将其用作函数中的变量,该函数读取该索引处的绑定DataTable行并返回值.一切正常,直到我点击列标题进行排序.它对DataGrid进行排序,但不对DataTable进行排序,因此我的SelectedIndex已更改,但DataTable的索引没有更改,因此返回错误的值.
我找了Column Header点击事件 - 没有运气; 我试图得到网格当前排序的列的标题 - nada; 我试图在DataGridTextColumn模板上使用"Click"EventSetter - 不受支持.
我完全不知所措.如果WPF应该是对Windows Forms的改进,为什么删除了一些简单的功能呢?(同样愚蠢的是你必须绑定数据只是为了添加行,只是说.)我可以使用Windows Forms DataGrid并且不会有任何麻烦,但是我无法设置它的样式.
也许我没有正确地执行检查或某事......?下面是我的检索/输出代码.有人有主意吗???对你的帮助表示感谢!
DataRow selectedRow = my_data.Tables[0].Rows[my_grid.SelectedIndex];
MessageBox.Show(selectedRow["ItemName"]);
Run Code Online (Sandbox Code Playgroud) 我真的希望有人可以帮助我.我的程序中有一个DataGrid,它有一个复选框列.DataGrid的ItemsSource是以编程方式加载的DataSet.当我在DataGrid中选择几个项目然后滚动它时,我会得到一些非常奇怪的行为.例如,当我检查两个CheckBox时,它告诉我有"2选择",但是如果我在DataGrid中向上或向下滚动,则数字会改变.如果我回滚到初始位置,它会回到"2选中".虽然听起来很奇怪,但当我滚动框时,它似乎正在调用Checked/Unchecked事件...非常奇怪......
我的代码顶部定义了以下内容:
private DataSet MyDataSet;
int selected_count = 0;
Run Code Online (Sandbox Code Playgroud)
然后我在我的方法中有以下代码将信息加载到DataSet中:
MyDataSet = new DataSet();
DataTable tempDataTable = new DataTable();
MyDataSet.Tables.Add(tempDataTable);
DataColumn tempCol = new DataColumn("Checked", typeof(bool));
tempDataTable.Columns.Add(tempCol);
for (int i = 0; i < 50; i++)
{
DataRow tempRow = tempDataTable.NewRow();
tempDataTable.Rows.Add(tempRow);
tempRow["Checked"] = false;
}
MyList.ItemsSource = MyDataSet.Tables[0].DefaultView;
Run Code Online (Sandbox Code Playgroud)
我将IsChecked属性绑定到名为"Checked"的DataColumn,使用以下XAML:
<dtgrd:DataGrid x:Name="MyList" AutoGenerateColumns="False" CanUserAddRows="False" CanUserResizeRows="False" HeadersVisibility="Column" SelectionUnit="FullRow" HorizontalGridLinesBrush="#FF688CAF" VerticalGridLinesBrush="#FF688CAF">
<dtgrd:DataGrid.Columns>
<dtgrd:DataGridTemplateColumn x:Name="CheckCol" CanUserSort="True" CanUserResize="False">
<dtgrd:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox Name="MyCheckBox" IsChecked="{Binding Checked}" HorizontalAlignment="Center" VerticalAlignment="Center" Checked="MyCheckBox_Checked" Unchecked="MyCheckBox_Unchecked" />
</DataTemplate>
</dtgrd:DataGridTemplateColumn.CellTemplate>
</dtgrd:DataGridTemplateColumn>
</dtgrd:DataGrid.Columns>
</dtgrd:DataGrid> …Run Code Online (Sandbox Code Playgroud)