<UserControl x:Class="WpfCtrlLib.Ui.QuotesCtrl.QuotesCard"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
>
<Grid Name="gQuotesCard" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" >
<Grid.Resources>
<Style TargetType="DataGridCell" x:Key="cellStyle">
<Setter Property="Foreground" Value="White"/>
</Style>
</Grid.Resources>
<Grid.RowDefinitions>
<RowDefinition/>
</Grid.RowDefinitions>
<DataGrid Grid.Row="0" x:Name="gQuotesCardList" CanUserSortColumns="True" FrozenColumnCount="1" Margin="2">
</DataGrid>
</Grid>
</UserControl>
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Markup;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Xml;
using System.Xml.Linq;
using WpfCtrlLib.Model.Quotes;
using WpfCtrlLib.Pub;
using WpfCtrlLib.Service.Quotes;
using WpfCtrlLib.Service.Quotes.Imp;
using WpfCtrlLib.Ui.UserCtrl;
using WpfCtrlLib.Util;
namespace WpfCtrlLib.Ui.QuotesCtrl
{
/// <summary>
/// QuotesCard.xaml 的交互逻辑
/// </summary>
public partial class QuotesCard : UserControl
{
private IQuotesPubService qcs = new QuotesPubServiceImpl();
public QuotesCard()
{
InitializeComponent();
DataGrid dg = new DataGrid();
List<Colums> list = qcs.getColumns();
double totalWidth = 1000;
Window win = Mgr.CurrentWindow;
if (win.Name == "quotes")
{
WinQuotes quotes = (WinQuotes)win;
QuotesPanel qp = quotes.qPanel;
QuotesContent qc = qp.Price;
qc.UpdateLayout();
//totalWidth = qc.ActualWidth;
}
else if (win.Name == "winTradeAndQuotes")
{
WinTradeAndQuotes tradeAndQuotes = (WinTradeAndQuotes)win;
QuotesPanel qp = tradeAndQuotes.quotesPanel;
QuotesContent qc = qp.Price;
qc.UpdateLayout();
//totalWidth = qc.ActualWidth;
}
totalWidth = totalWidth - 9;
this.gQuotesCard.Width = totalWidth;
double width = totalWidth / list.Count;
//
for (int i = 0; i < list.Count; i++)
{
DataGridTextColumn dtc = new DataGridTextColumn();
dtc.Header = StringUtil.I18N(list[i].Name);
Binding bind = new Binding(list[i].Name);
//PriceDataConverter con=new PriceDataConverter();
//bind.Converter = con;
dtc.Binding = bind;
dtc.Width = width;
dtc.IsReadOnly = true;
Style style = new Style(typeof(DataGridCell));
Setter set = new Setter(DataGridCell.ForegroundProperty, Brushes.Red);
Setter set1 = new Setter(DataGridCell.BackgroundProperty, Brushes.Black);
style.Setters.Add(set);
dtc.CellStyle = style;
Style headerStyle = new Style(typeof(DataGridColumnHeader));
Setter headerSet = new Setter(DataGridCell.ForegroundProperty, Brushes.DarkGray);
headerStyle.Setters.Add(headerSet);
headerStyle.Setters.Add(set1);
dtc.HeaderStyle = headerStyle;
dg.Columns.Add(dtc);
}
dg.Background = Brushes.Black;
this.gQuotesCard.Children.Add(dg);
}
public QuotesCard(List<FQContract> contracts)
{
InitializeComponent();
try
{
//DataGrid dg = new DataGrid();
DataGrid dg = this.gQuotesCardList;
List<Colums> list = qcs.getColumns();
//this.gQuotesCard.UpdateLayout();
//double w = this.gQuotesCard.ActualWidth;;
double totalWidth = 1000;
// Window win = Mgr.CurrentWindow;
if (Mgr.WinQuote!=null) {
WinQuotes quotes = (WinQuotes)Mgr.WinQuote;
QuotesPanel qp = quotes.qPanel;
QuotesContent qc = qp.Price;
qc.UpdateLayout();
//totalWidth = qc.ActualWidth;
}
else if (Mgr.WinTradeAndQuote!=null)
{
WinTradeAndQuotes tradeAndQuotes = (WinTradeAndQuotes)Mgr.WinTradeAndQuote;
QuotesPanel qp = tradeAndQuotes.quotesPanel;
QuotesContent qc = qp.Price;
qc.UpdateLayout();
//totalWidth = qc.ActualWidth;
}
// totalWidth = totalWidth;
//this.gQuotesCard.Width = totalWidth;
//this.gQuotesCard.UpdateLayout();
//double width = totalWidth/ list.Count;
//
for (int i = 0; i < list.Count; i++)
{
DataGridTextColumn dtc = new DataGridTextColumn();
dtc.Header = StringUtil.I18N(list[i].Name);
Binding bind = new Binding(list[i].Name);
if (list[i].Name == "NewPrice" || list[i].Name == "OpenPrice" || list[i].Name == "HighPrice" || list[i].Name == "ClosePrice" || list[i].Name == "BuyPrice" || list[i].Name == "SellPrice" || list[i].Name == "AvgPrice" || list[i].Name == "LowPrice")
{
PriceDataConverter priceConverter=new PriceDataConverter();
bind.Converter = priceConverter;
}
//dtc.Foreground = Brushes.White;
dtc.Binding = bind;
//dtc.Width = new DataGridLength();
dtc.IsReadOnly = true;
Style style = new Style(typeof(DataGridCell));
Setter set = new Setter(DataGridCell.ForegroundProperty, Brushes.Red);
Setter set1 = new Setter(DataGridCell.BackgroundProperty,Brushes.Black);
style.Setters.Add(set);
dtc.CellStyle = style;
Style headerStyle = new Style(typeof(DataGridColumnHeader));
Setter headerSet = new Setter(DataGridCell.ForegroundProperty, Brushes.DarkGray);
headerStyle.Setters.Add(headerSet);
headerStyle.Setters.Add(set1);
dtc.HeaderStyle = headerStyle;
//设置宽度
//DataGridLength.SizeToCells.;
//dtc.Width = DataGridLength.Auto;
dg.GridLinesVisibility = DataGridGridLinesVisibility.None;//设置没有边框
dg.Columns.Add(dtc);
}
//获取合同信息
ObservableCollection<QuotesPlateModel> oc = new ObservableCollection<QuotesPlateModel>();
List<QuotesPlateModel> contractsList = qcs.getPalteContractsInfo(contracts);
for (int i = 0; i < contractsList.Count; i++)
{
oc.Add(contractsList[i]);
}
//设置行样式
Style rowStyle=new Style(typeof(DataGridRow));
Trigger rowTrigger = new Trigger();//触发器
rowTrigger.Property = DataGridRow.IsMouseOverProperty;
rowTrigger.Value = true;
Setter trggerSet = new Setter(DataGridRow.BackgroundProperty, Brushes.Gold);
Setter rowSet = new Setter(DataGridRow.BackgroundProperty, Brushes.Black);
rowTrigger.Setters.Add(trggerSet);
rowStyle.Setters.Add(rowSet);
rowStyle.Triggers.Add(rowTrigger);
dg.RowStyle=rowStyle;
dg.CanUserAddRows = false;
dg.AutoGenerateColumns = false;
dg.HeadersVisibility = DataGridHeadersVisibility.Column;
dg.ItemsSource = oc;
/*DataGrid添加行双击击事件*/
dg.MouseDoubleClick += (object sender, MouseButtonEventArgs e) =>
{
Point aP = e.GetPosition(dg);
IInputElement obj = dg.InputHitTest(aP);
DependencyObject target = obj as DependencyObject;
while (target != null)
{
if (target is DataGridRow)
{
break;
}
target = VisualTreeHelper.GetParent(target);
}
DataGridRow row = target as DataGridRow;
if (row == null || row.DataContext == null) return;
QuotesPlateModel model = row.DataContext as QuotesPlateModel;
if (model == null) return;
Mgr.FlashService.Show(model.ContractID);
};
//添加选中事件
// dg.MouseDown+=dg_MouseDown;
dg.Background = Brushes.Black;
dg.SelectionChanged+=new SelectionChangedEventHandler(dg_SelectionChanged);
//this.gQuotesCard.Children.Add(dg);
}
catch (AppException app)
{
MessageBox.Show(app.Message, StringUtil.I18N("sys_info"), MessageBoxButton.OK, MessageBoxImage.Information);
}
catch (Exception ex)
{
string errString = ex.Message;
Console.WriteLine("=================errString:" + errString);
MessageBox.Show(errString);
//MessageBox.Show(StringUtil.I18N("sys_operation_failed"), StringUtil.I18N("sys_info"), MessageBoxButton.OK, MessageBoxImage.Information);
}
}
/// <summary>
/// 选中事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void dg_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
try
{
DataGrid dg = (DataGrid)sender;
var items = dg.SelectedItems;
if (items.Count > 0) {
QuotesPlateModel model = (QuotesPlateModel)items[0];
//qcs.updatePriceStatistics(model);
}
}
catch (AppException app)
{
MessageBox.Show(app.Message, StringUtil.I18N("sys_info"), MessageBoxButton.OK, MessageBoxImage.Information);
}
catch (Exception ex)
{
string errString = ex.Message;
Console.WriteLine("=================errString:" + errString);
MessageBox.Show(StringUtil.I18N("sys_operation_failed"), StringUtil.I18N("sys_info"), MessageBoxButton.OK, MessageBoxImage.Information);
}
}
}
//控制表格价格的显示
[ValueConversion(typeof(string), typeof(string))]
public class PriceDataConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string result = "--";
string v = value.ToString();
if (v == "--")
{
return result;
}
result = StringUtil.GetPriceData(v, true);
//result = StringUtil.GetPrice(v);
return result;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
分享到:
相关推荐
`来安排工作,将`beep_work_handler`添加到工作队列中,等待执行。这可以是基于定时器、用户输入或其他系统事件触发的。 5. **中断处理程序**:如果蜂鸣器的开关需要在中断上下文中进行,代码可能还包括一个中断...
3. **定制化工作流**:work_bg支持自定义工作流程模板,用户可以根据自己的需求设置步骤和顺序,实现个性化的工作流程,如代码编译、测试执行、持续集成/持续部署(CI/CD)等。 4. **版本控制**:集成版本控制系统...
在Linux内核中,你可以使用`irq_work_queue()`函数将一个`irq_work`结构体添加到工作队列,然后在适当的时间(即退出中断处理后),`irq_work_run()`会执行这些被排队的工作。 在描述中提到的“Claim the entry so ...
在技术层面上,Work_Reader的更新可能涉及到代码重构、错误修复和性能优化。例如,可能对内存管理进行了优化,减少了软件运行时的内存占用,提升了运行效率;或是对特定API的调用进行了调整,以适应更多种类的设备。...
3. **错误处理**:在关键代码段中添加异常处理逻辑,捕获可能出现的错误,并将其记录为日志。这样可以帮助开发者迅速定位问题所在。 4. **日志存储**:日志可以存储在本地文件系统、数据库或网络共享位置。本例中...
"work_log测试模块_" 提供的是一套用于日志处理的代码,旨在实现模块化的日志记录功能,使得程序员可以更便捷地在各自的模块中集成日志功能。下面我们将深入探讨这个测试模块的核心知识点。 首先,`MyLog.cpp`和`...
2. **源代码输入**:在工程中添加VHDL或Verilog源文件,这些文件包含了要实现的逻辑电路描述。用户也可以导入IP核( Intellectual Property cores),这些都是预先设计好的功能模块,可直接在设计中复用。 3. **...
然后,使用`init_work()`函数初始化这个工作项,并使用`queue_work()`将其添加到工作队列。一旦添加,调度器会在未来的某个时间点调用`worker_thread()`来执行这个工作。 工作队列的设计考虑到内核的实时性和响应性...
同时,JavaScript可能被用来实现动态功能,如添加、删除或修改任务,以及在特定时间提醒用户。 考虑到压缩包子文件的文件名称列表仅有一个“Work_Day_Scheduler_W5-main”,这可能是一个项目的主目录,里面可能包含...
核心的 ffmpeg 工具可以用来进行格式转换、编码、解码、剪辑、添加水印、调整分辨率等任务,支持众多的视频和音频格式,如 MP4、AVI、FLV、MP3、AAC 等。 在Linux中,通常使用命令行来操作 FFmpeg。安装这个0.9.2...
例如,在这个应用中,用户可能需要添加新的锻炼记录,这时JavaScript会找到相应的表单元素,处理用户的输入,并将新数据插入到页面的展示区域。 事件处理是用户界面交互的基础。通过监听用户的点击、提交等行为,...
2. 车次管理:添加、删除、修改车次信息,包括出发地、目的地、时间、票价等。 3. 订单管理:用户购票、退票、订单查询等功能。 4. 座位管理:分配、取消座位,显示座位状态。 5. 支付接口:集成第三方支付平台,...
this seems to only work // properly when invoked from a context menu } ``` 这个代码的核心功能包括: 1. **SaveData**:这是一个用于序列化数据并存储到全局变量的函数。它接收一个二维数组作为参数,然后...
【压缩包子文件的文件名称列表】"INT203_6213050017_Groupwork_4-master"是压缩包内的唯一文件,通常在GitHub等版本控制系统中,“master”分支指的是项目的主分支,包含项目的核心代码或资源。在这个案例中,它可能...
创建一个新的Maven项目时,Eclipse会自动生成一个基础的POM.xml文件,开发者可以在这个文件中添加项目依赖,如Spring框架的核心库。 接下来,我们进入Spring框架的学习。Spring是一个开源的Java平台,它提供了全面...
标题“INT203_62130500050_groupwork_03”和描述“INT203_62130500050_groupwork_03”似乎指的是一个项目或者课程作业,可能属于INT203这门课程的一部分,编号为62130500050,而“groupwork_03”则可能代表这是第三...
【描述】描述中的"work12_24.zip"表明这可能是一个与工作相关的文件集合,可能包含了项目文件、文档、代码、图像或其他资源。"work12_24"的命名方式可能代表特定的工作周期,例如12月24日完成的任务或者第12周第24天...
在工作在进程(Work In Progress,WIP)阶段的FlowMap实现中,开发者可能正在逐步完善算法的各个部分,如数据结构优化、性能调优、错误处理等。 Rust是一种现代的系统级编程语言,它的设计目标是提供高性能、内存...
在描述中提到的"pop3 server...it s show that pop3 s work process with delphi..."意味着这个资源将深入解释POP3服务器的工作原理,并展示如何使用Delphi来构建这样的服务器。下面我们将详细讨论POP3协议和使用...