【WPF】自定義控件:ShellEditControl-同列單元格編輯支持文本框、下拉框和彈窗

需要實現表格同一列,單元格可以使用文本框直接輸入編輯、下拉框選擇和彈窗,文本框只能輸入數字,彈窗中的數據是若干位的二進制值。

本文提供了兩種實現單元格編輯狀態下,不同編輯控件的方法:
1、DataTrigger控制控件的顯示;
2、定義DataTemplateSelector選擇器根據數據返回不同模板。

效果如下:
![[gif-ShellEditControl.gif]]

數據

行數據類定義

每行數據需要定義屬性:

  • detail:string,描述
  • valueType:enum,值類型
  • setValue:object,設定值,需要定義成可更新屬性(mvvm)
  • valueOptions:List<optionModel>,值類型為選項時,此屬性有值
  • selectedOptionItem:optionModel,所選的元素,需要定義成可更新屬性(mvvm)
  • childValues:ObservableCollection<ChildValueModel>,值類型為對象時,此屬性有值
  • EditChildValueCommand:RelayCommand,編輯childValues發生彈窗事件按鈕
  • editType:string/enum,修改類型,值為不可修改時單元格不可編輯
    定義方法
  • ParseValueToChildValue:setValue轉childValues
public class GirdData : ObservableObject
{public string detail { get; set; }public ValueTypeEnum valueType { get; set; }private object _value;public object setValue{get{return _value;}set{//彈窗數據,二進制 《---》 十進制if (valueType == ValueTypeEnum.Object) childValues = ParseValueToChildValue(value, defaltChildValues);//文本框數據,string <----> 數值//value未填寫時默認為“--”if (valueType == ValueTypeEnum.Number && value.ToString() != "--")try { //decimalPlaces小數點位數,類中應當有該屬性,這里省略value = Decimal.Round(Decimal.Parse(value.ToString()), decimalPlaces); } catch { }OnPropertyChanged(ref _value, value);}}public List<OptionModel> valueOptions { get; set; }public OptionModel selectedOptionItem{get{if (this.valueType != ValueTypeEnum.Option) return null;//獲取setValue對應的選項if (setValue.ToString() == "--") return new OptionModel();return valueOptions.Find(_ => _.optionValue.ToString() == setValue.ToString());}set{if (this.valueType != ValueTypeEnum.Option) return;//獲取選中選項的值this.setValue = value.optionValue;}}public ObservableCollection<ChildValueModel> childValues { get; set; }public RelayCommand EditChildValueCommand { get; set; }//十進制轉二進制public ObservableCollection<ChildValueModel> ParseValueToChildValue(object oValue, ObservableCollection<ChildValueModel> childValues){return ParseValueToChildValue_static(oValue, childValues);}public static ObservableCollection<ChildValueModel> ParseValueToChildValue_static(object oValue, ObservableCollection<ChildValueModel> childValues){int value = int.Parse(oValue.ToString());string sValues = Convert.ToString(value, 2);if (sValues.Length > childValues.Count) return null;sValues = sValues.PadLeft(childValues.Count, '0');for (int i = 0; i < childValues.Count; i++){childValues[childValues.Count - 1 - i].value = int.Parse(sValues[i].ToString());}return childValues;}
}
public enum ValueTypeEnum
{Number,Option,Object
}
//下拉框選項的類
public class OptionModel
{public int optionValue { get; set; }public string detail { get; set; }public override string ToString(){return fullDetail;}//頁面中展示的選項及結果的字符串格式 值[描述]public string fullDetail{get{string res = optionValue + "[" + detail + "]";return detail == null ? "--" : res;}}
}
//彈窗中各位二進制對應類
public class ChildValueModel : ObservableObject, ICloneable
{public Action InvokeCollectionChangedAction;private object _value;public object value{get => _value;set{OnPropertyChanged(ref _value, value);//其中一位發生改變,對應的十進制發生變化,觸發該事件InvokeCollectionChangedAction?.Invoke();}}public string propertyName { get; set; }public object Clone(){return new ChildValueModel{value = this.value,propertyName = this.propertyName};}
}

生成表格數據

寫一些假數據,格式如下

new ObservableCollection<GirdDataModel>{new GirdData(){detail:**,valueType:ValueTypeEnum.**,setValue:**,//如“--”、1、23.432editType:**,//valueType==ValueTypeEnum.Option//如valueOptions = new List<OptionModel>{new OptionModel{ optionValue=0,detail="正向"},new OptionModel{ optionValue=1,detail="反向"}},//valueType==ValueTypeEnum.Object//如childValues = new ObservableCollection<ChildValueModel>{new ChildValueModel{ propertyName="bit0",value=0},new ChildValueModel{ propertyName="bit1",value=0},new ChildValueModel{ propertyName="bit2",value=0},new ChildValueModel{ propertyName="bit3",value=0},}},...
}

頁面

表格頁面

View

主要列包括

  • 描述 - detail
  • 設定值 - setValue
    <DataGridTemplateColumn.CellTemplate>自定義單元格未編輯時內容模板
  • 值類型為Option時,綁定selectedOptionItem,會自動調用ToString,顯示格式:值[描述];
  • 值類型為其他時,綁定setValue;
    <DataGridTemplateColumn.CellEditingTemplate>自定義單元格編輯時內容模板
    提供兩種實現不同值類型,單元格編輯方式不同的方法
1、DataTrigger控制控件的顯示
  • 值類型為Number時,顯示文本框,綁定setValue;
  • 值類型為Option時,顯示下拉框,ItemsSource綁定valueOptions,SelectedItem綁定selectedOptionItem,下拉框元素模板本文綁定fullDetail,格式:值[描述];
  • 值類型為Object時,顯示文本+詳情按鈕,文本綁定setValue,按鈕綁定EditChildValueCommand(詳細方法定義在VM中),并傳值行全部數據。
<DataGrid ItemsSource="{Binding GridData,Mode=TwoWay}" RowBackground="#E4FAF5"AlternatingRowBackground="#C8F0F0"CanUserAddRows="False"AutoGenerateColumns="False"><DataGrid.Columns><DataGridTextColumn Header="描述" Binding="{Binding detail,Mode=OneWay}" IsReadOnly="True"/><DataGridTemplateColumn Header="設定值"><DataGridTemplateColumn.CellTemplate><DataTemplate><Grid><TextBlock><TextBlock.Style><Style TargetType="TextBlock"><Setter Property="Text" Value="{Binding setValue,StringFormat=N0,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/><Style.Triggers><DataTrigger Binding="{Binding valueType}" Value="Option"><Setter Property="Text" Value="{Binding selectedOptionItem}"/></DataTrigger><DataTrigger Binding="{Binding decimalPlaces}" Value="3"><Setter Property="Text" Value="{Binding setValue,StringFormat=N3,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/></DataTrigger></Style.Triggers></Style></TextBlock.Style></TextBlock></Grid></DataTemplate></DataGridTemplateColumn.CellTemplate><DataGridTemplateColumn.CellEditingTemplate><DataTemplate><Grid><Grid.Resources><Style TargetType="TextBox" x:Key="SetValueBox"><Setter Property="Text" Value="{Binding setValue,StringFormat=N0,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/><Setter Property="Visibility" Value="Collapsed"/><Setter Property="Template"><Setter.Value><ControlTemplate><Grid><Rectangle StrokeThickness="1"/><TextBox Margin="1"Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Text,Mode=TwoWay}"BorderThickness="0"Background="Transparent"VerticalAlignment="Center"Foreground="WhiteSmoke"/></Grid></ControlTemplate></Setter.Value></Setter><Style.Triggers><DataTrigger Binding="{Binding valueType}" Value="Number"><Setter Property="Visibility" Value="Visible"/></DataTrigger><DataTrigger Binding="{Binding decimalPlaces}" Value="3"><Setter Property="Text" Value="{Binding setValue,StringFormat=N3,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/></DataTrigger></Style.Triggers></Style></Grid.Resources><TextBox Style="{StaticResource SetValueBox}"/><ComboBox ItemsSource="{Binding valueOptions}"SelectedItem="{Binding selectedOptionItem}"><ComboBox.Style><Style TargetType="ComboBox"><Setter Property="Visibility" Value="Collapsed"/><Style.Triggers><DataTrigger Binding="{Binding valueType}" Value="Option"><Setter Property="Visibility" Value="Visible"/></DataTrigger></Style.Triggers></Style></ComboBox.Style><ComboBox.ItemTemplate><DataTemplate><TextBlock Text="{Binding fullDetail}"/></DataTemplate></ComboBox.ItemTemplate></ComboBox><Grid><Grid.Style><Style TargetType="Grid"><Setter Property="Visibility" Value="Collapsed"/><Style.Triggers><DataTrigger Binding="{Binding valueType}" Value="Object"><Setter Property="Visibility" Value="Visible"/></DataTrigger></Style.Triggers></Style></Grid.Style><TextBlock Text="{Binding setValue,Mode=TwoWay}"/><Button Width="20" Content="..." HorizontalAlignment="Right"Command="{Binding EditChildValueCommand}"CommandParameter="{Binding}"/></Grid></Grid></DataTemplate></DataGridTemplateColumn.CellEditingTemplate></DataGridTemplateColumn></DataGrid.Columns>
</DataGrid>
2、定義DataTemplateSelector選擇器

選擇器可以根據值類型和修改類型,返回不同單元格編輯模板
選擇器邏輯如下:

public class CellEditTemplateSelector : DataTemplateSelector
{public DataTemplate TextBoxTemplate { get; set; }public DataTemplate ComboxTemplate { get; set; }public DataTemplate PopupButtonTemplate { get; set; }public DataTemplate UnEnableTemplate { get; set; }public override System.Windows.DataTemplate SelectTemplate(object item, System.Windows.DependencyObject container) {if (item is GirdDataModel) {GirdDataModel data = item as GirdDataModel;if (data.editType == "不可修改") return UnEnableTemplate;switch (data.valueType){case ValueTypeEnum.Number:return TextBoxTemplate;case ValueTypeEnum.Option:return ComboxTemplate;case ValueTypeEnum.Object:return PopupButtonTemplate;}}return base.SelectTemplate(item, container);}
}

xaml中定義不同的單元格編輯模板,然后將選擇器應用值CellEditingTemplateSelector屬性。

<UserControl.Resources><local:SetValueTextConverter x:Key="SetValueTextConverter"/><local:SetValueTextEditingConverter x:Key="SetValueTextEditingConverter"/><local:CellEditTemplateSelector x:Key="CellEditTemplateSelector"><local:CellEditTemplateSelector.TextBoxTemplate><DataTemplate><TextBox><TextBox.Text><MultiBinding Converter="{StaticResource SetValueTextEditingConverter}"><Binding Path="setValue" UpdateSourceTrigger="PropertyChanged" /><Binding Path="decimalPlaces"/></MultiBinding></TextBox.Text></TextBox></DataTemplate></local:CellEditTemplateSelector.TextBoxTemplate><local:CellEditTemplateSelector.ComboxTemplate><DataTemplate><ComboBox ItemsSource="{Binding valueOptions}"SelectedItem="{Binding selectedOptionItem}"><ComboBox.ItemTemplate><DataTemplate><TextBlock Text="{Binding fullDetail}"/></DataTemplate></ComboBox.ItemTemplate></ComboBox></DataTemplate></local:CellEditTemplateSelector.ComboxTemplate><local:CellEditTemplateSelector.PopupButtonTemplate><DataTemplate><Grid><TextBlock Text="{Binding setValue,Mode=TwoWay}"/><Button Width="20" Content="..." HorizontalAlignment="Right"Command="{Binding EditChildValueCommand}"CommandParameter="{Binding}"/></Grid></DataTemplate></local:CellEditTemplateSelector.PopupButtonTemplate><local:CellEditTemplateSelector.UnEnableTemplate><DataTemplate><TextBlock Text="--"/></DataTemplate></local:CellEditTemplateSelector.UnEnableTemplate></local:CellEditTemplateSelector>
</UserControl.Resources>
...
<DataGrid ItemsSource="{Binding GridData,Mode=TwoWay}" RowBackground="#E4FAF5"AlternatingRowBackground="#C8F0F0"CanUserAddRows="False"AutoGenerateColumns="False"><DataGrid.Columns><DataGridTextColumn Header="描述" Binding="{Binding detail,Mode=OneWay}" IsReadOnly="True"/><DataGridTemplateColumn Header="設定值" CellEditingTemplateSelector="{StaticResource CellEditTemplateSelector}"><DataGridTemplateColumn.CellTemplate><DataTemplate><Grid><TextBlock><TextBlock.Style><Style TargetType="TextBlock"><Setter Property="Text" Value="{Binding setValue,StringFormat=N0,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/><Style.Triggers><DataTrigger Binding="{Binding valueType}" Value="Option"><Setter Property="Text" Value="{Binding selectedOptionItem}"/></DataTrigger><DataTrigger Binding="{Binding decimalPlaces}" Value="3"><Setter Property="Text" Value="{Binding setValue,StringFormat=N3,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/></DataTrigger></Style.Triggers></Style></TextBlock.Style></TextBlock></Grid></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn></DataGrid.Columns>
</DataGrid>

ViewModel

private DataAccessForGrid dataAccessForGrid;
public ObservableCollection<GirdData> gridData { get; set; }
public ShellEditControl()
{dataAccessForGrid = new DataAccessForGrid();gridData = dataAccessForGrid.GetDataList();foreach (var _ in gridData){if (_.valueType == ValueTypeEnum.Object){//定義彈窗事件_.EditChildValueCommand = new RelayCommand((o) =>{ChildValueEditPopupOpen(_);});}}
}
//使用IOC模式打開彈窗
private void ChildValueEditPopupOpen(GirdData data)
{IChildValueEditPopupService service = IoC.Provide<IChildValueEditPopupService>();ChildValueEditPopupResult res = service.ChildValueEditPopupOpen(data);if (res.IsSuccess){data.setValue = res.setValue;}
}

彈窗頁面

View

主要內容:表格(ChildValues)和當前值(SetValue)

<Window x:Class="bueatifulApp.Components.DataGridWithEdit.View.ChildValuePopup"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:bueatifulApp.Components.DataGridWithEdit.View"mc:Ignorable="d"Title="寫入參數" Height="313" Width="400"Background="#DADFEA" ><Grid Margin="10"><Grid.RowDefinitions><RowDefinition Height="55"/><RowDefinition/><RowDefinition Height="30"/></Grid.RowDefinitions><Grid ><Grid.ColumnDefinitions><ColumnDefinition Width="100"/><ColumnDefinition/></Grid.ColumnDefinitions><Grid.RowDefinitions><RowDefinition Height="25"/></Grid.RowDefinitions><TextBlock VerticalAlignment="Center" Text="描述" Grid.Column="0" Grid.Row="1"/><TextBox Height="18" Text="{Binding Code}" IsEnabled="False" Grid.Column="1" Grid.Row="1"/></Grid><Grid Grid.Row="1"><DataGrid ItemsSource="{Binding ChildValues,Mode=TwoWay}" CanUserAddRows="False"AutoGenerateColumns="False"><DataGrid.Columns><DataGridTextColumn Header="屬性名" Binding="{Binding propertyName,Mode=OneWay}" IsReadOnly="True"/><DataGridTextColumn Header="設定值" Binding="{Binding value,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/></DataGrid.Columns></DataGrid></Grid><Grid Grid.Row="2"><Grid.ColumnDefinitions><ColumnDefinition Width="200"/><ColumnDefinition/></Grid.ColumnDefinitions><Grid><Grid.ColumnDefinitions><ColumnDefinition Width="70"/><ColumnDefinition/></Grid.ColumnDefinitions><TextBlock VerticalAlignment="Center" Text="當前值"/><TextBox Height="18" Text="{Binding SetValue,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Grid.Column="1"/></Grid><Grid Grid.Column="1" HorizontalAlignment="Right"><Grid.ColumnDefinitions><ColumnDefinition/><ColumnDefinition/></Grid.ColumnDefinitions><Button Command="{Binding OKCommand}" Height="25" Width="60" Content="確定" Margin="0,0,10,0"/><Button Command="{Binding CancelCommand}" Height="25" Width="60" Content="取消" Grid.Column="1"/></Grid></Grid></Grid>
</Window>

ViewModel

public class ChildValueEditViewModel : ObservableObject
{private string code;//描述private ObservableCollection<ChildValueModel> childValues;//表格數據private object setValue;//設定值public string Code{get => this.code;set => OnPropertyChanged(ref code, value);}public ObservableCollection<ChildValueModel> ChildValues{get => this.childValues;set => OnPropertyChanged(ref childValues, value);}public object SetValue{get => this.setValue;set => OnPropertyChanged(ref setValue, value);}
}public class ChildValueEditPopupViewModel : ChildValueEditViewModel
{public ICommand OKCommand { get; }public ICommand CancelCommand { get; }public IView View { get; }public ChildValueEditPopupViewModel(IView view){this.View = view;this.OKCommand = new RelayCommand((o) => this.OkAction());this.CancelCommand = new RelayCommand((o) => this.CancelAction());}public void OkAction(){this.View.CloseDialog(true); // close it with a successful result}public void CancelAction(){this.View.CloseDialog(false); // close it with a failed result}
}

服務

定義窗口打開事件
定義窗口打開時接受的數據

服務接口
public interface IChildValueEditPopupService
{Task<ChildValueEditPopupResult> ChildValueEditPopupOpenAsync(GirdData data);ChildValueEditPopupResult ChildValueEditPopupOpen(GirdData data);
}
public class ChildValueEditPopupResult : ObservableObject
{public bool IsSuccess { get; set; }private object _setValue;public string code { get; set; }public object setValue { get=>_setValue; set=>OnPropertyChanged(ref _setValue,value); }
}
服務實現
internal class ChildValueEditPopupService : IChildValueEditPopupService
{public ChildValueEditPopupResult ChildValueEditPopupOpen(GirdData data){var popup = new ChildValuePopup();popup.ViewModel.Code = data.detail;//需要深拷貝,才能正確修改大表數據popup.ViewModel.ChildValues = Copy.DeepCopy( data.childValues);foreach (var item in popup.ViewModel.ChildValues){//定義大表設定值響應事件item.InvokeCollectionChangedAction = () => {popup.ViewModel.SetValue = GirdDataModel.ParseChildValues_static(popup.ViewModel.ChildValues);};}popup.ViewModel.SetValue = data.setValue;bool result = popup.ShowDialog() == true;if (!result) {return new ChildValueEditPopupResult() { IsSuccess = false};}return new ChildValueEditPopupResult(){IsSuccess = true,code = popup.ViewModel.Code,setValue = popup.ViewModel.SetValue,}; }public async Task<ChildValueEditPopupResult> ChildValueEditPopupOpenAsync(GirdData data) {return await Application.Current.Dispatcher.InvokeAsync(() => {return ChildValueEditPopupOpen(data);});}
}
服務注冊
 public partial class MainWindow : Window{public MainWindow(){InitializeComponent();IoC.Register<IChildValueEditPopupService>(new ChildValueEditPopupService());}}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/77584.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/77584.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/77584.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Gson、Fastjson 和 Jackson 對比解析

目錄 1. Gson (Google) 基本介紹&#xff1a; 核心功能&#xff1a; 特點&#xff1a; 使用場景&#xff1a; 2. Fastjson (Alibaba) 基本介紹&#xff1a; 核心功能&#xff1a; 特點&#xff1a; 使用場景&#xff1a; 3. Jackson 基本介紹&#xff1a; 核心功能…

淺談微信視頻號推薦算法

這次可能會稍微有點干貨&#xff0c;但保證不晦澀~ 一、算法推薦的本質&#xff1a;猜你喜歡 vs 社交綁架? 視頻號的推薦系統本質上在做兩件事&#xff1a; ?預測你的興趣?&#xff1a;通過你的瀏覽、點贊、評論、分享等行為&#xff0c;分析你的偏好。?滿足社交需求?&…

halcon模板匹配(一)create_shape_model_xld

目錄 一、提取剎車盤孔洞輪廓二、形狀模板的創建-設置-訓練-查找三、找到亮的圓孔四、獲得匹配結果五、使用use_polarity進行模板匹配六、計算四個圓對應的矩形框七、創建四個圓對應的模板并查找一、提取剎車盤孔洞輪廓 小技巧總結,使用boundary 函數提取區域邊界,在邊界范圍…

day26圖像處理OpenCV

文章目錄 一、OpenCV1.介紹2.下載3.圖像的表示4.圖像的基本操作4.1圖片讀取或創建4.1.1讀取4.1.2創建 4.2創建窗口4.3顯示圖片4.3.1設置讀取的圖片4.3.2設置顯示多久4.3.3釋放 4.4.保存圖片4.5圖片切片&#xff08;剪裁&#xff09;4.6圖片大小調節 5.在圖像中繪值5.1繪制直線5…

零基礎開始學習鴻蒙開發-智能家居APP離線版介紹

目錄 1.我的小屋 2.查找設備 3.個人主頁 前言 好久不發博文了&#xff0c;最近都忙于面試&#xff0c;忙于找工作&#xff0c;這段時間終于找到工作了。我對鴻蒙開發的激情依然沒有減退&#xff0c;前幾天做了一個鴻蒙的APP&#xff0c;現在給大家分享一下&#xff01; 具體…

C++的*了又*

先看下面一段代碼 class HeapWord {friend class VMStructs;private:char *i; };主函數 #include "HeapWord.hpp" int main() {HeapWord *heapword new HeapWord();HeapWord *p new HeapWord();HeapWord **p1 new HeapWord *();heapword 3;*(HeapWord **)p he…

yolov8在windows系統的C++版本的onnxruntime部署方法

1.各個軟件的的環境需要保持在統一的版本。 onnxruntime需要和cuda的版本對應上,版本號:onnxruntime-win-x64-gpu-1.18.1 ,鏈接: NVIDIA - CUDA | onnxruntime cuda:本機顯卡支持的版本,cuda11.7,鏈接:CUDA Toolkit Archive | NVIDIA Developer cudnn:需要對應到cud…

js chrome 插件,下載微博視頻

修改說明&#xff1a; 代碼資源&#xff0c;免積分下載 起因&#xff0c; 目的: 最初是想下載微博上的NBA視頻&#xff0c;因為在看網頁上看視頻很不方便&#xff0c;快進一次是10秒&#xff0c;而本地 VLC 播放器&#xff0c;快進一次是5秒。另外我還想做點視頻剪輯。 對比…

【vue3】@click函數傳動態變量參數

根據java的學習&#xff0c;摸索了一下vue3 函數傳參的方式。以此作為記錄。有更好的其它方式&#xff0c;可以評論區補充。 <script> const tmpref(); </script><button click"tmpFunction(傳遞參數:tmp)">按鈕</button> // 直接【字符串…

jmeter 集成ZAP進行接口測試中的安全掃描 實現方案

以下是將 JMeter 集成 ZAP(OWASP Zed Attack Proxy)進行接口測試中安全掃描的實現方案: 1. 環境準備 JMeter 安裝:從 JMeter 官方網站(https://jmeter.apache.org/download_jmeter.cgi)下載并安裝 JMeter,確保其版本穩定。ZAP 安裝:從 ZAP 官方網站(https://www.zapr…

全能格式轉換器v16.3.0.159綠色便攜版

前言 全能格式轉換器具有音視頻格式轉換、合并視頻、壓縮視頻、錄制視頻、下載視頻、DVD刻錄等功能。以超快的轉換速度及強大的功能在國外名聲大噪&#xff0c;轉換速度是市面同類產品的30倍&#xff0c;操作簡便&#xff0c;支持158種視頻格式無損轉換&#xff0c;批量轉換高…

【基于開源insightface的人臉檢測,人臉識別初步測試】

簡介 InsightFace是一個基于深度學習的開源人臉識別項目,由螞蟻金服的深度學習團隊開發。該項目提供了人臉檢測、人臉特征提取、人臉識別等功能,支持多種操作系統和深度學習框架。本文將詳細介紹如何在Ubuntu系統上安裝和實戰InsightFace項目。 目前github有非常多的人臉識…

設計一個簡單的權限管理系統

針對大規模服務器集群的權限管理系統設計&#xff0c;需結合 角色分層、最小權限原則 和 動態權限控制 來實現安全高效的權限管理。以下是分階段設計方案&#xff1a; 一、核心設計思路 基于角色的訪問控制&#xff08;RBAC&#xff09; 定義角色層級&#xff08;如董事長 >…

使用 nano 文本編輯器修改 ~/.bashrc 文件與一些快捷鍵

目錄 使用 nano 編輯器保存并關閉文件使用 sed 命令直接修改文件驗證更改 如果你正在使用 nano 文本編輯器來修改 ~/.bashrc 文件&#xff0c;以下是保存并關閉文件的具體步驟&#xff1a; 使用 nano 編輯器保存并關閉文件 打開 ~/.bashrc 文件 在終端中運行以下命令&#xf…

spm12_fMRI 2*4混合方差分析 Flexible factorial 對比矩陣

實驗設計&#xff1a;2*4被試內設計 分析模型&#xff1a;spm 二階分析中的 Flexible factorial 問題&#xff1a;Flexible factorial交互作用對比矩陣如何編寫&#xff1f; 老師&#xff1a;deepseek老師【大神們看看這個矩陣是否可以如下編寫&#xff1f;】 以下是來自de…

用Python修改字體字形與提取矢量數據:fontTools實戰指南

字體設計與分析是NLP和視覺領域的交叉應用&#xff0c;而**fontTools** 是一款強大的Python庫&#xff0c;可以讓我們直接操作字體文件的底層結構。本文將通過兩個實用函數&#xff0c;展示如何修改特定字形和提取所有字形的矢量數據&#xff0c;幫助開發者快速上手字體編輯與分…

Windows 11 PowerShell重定向文本文件的編碼問題

目錄 問題的由來 編碼導致的問題 解決辦法 VSCode進行轉換 記事本進行轉換 直接指定輸出的文本編碼 總結 問題的由來 在我的嵌入式系統的課程中有一個裸機開發的實驗&#xff0c;其中需要把圖片等文件轉換為C語言數組保存在程序中。課程中&#xff0c;我推薦了CodePlea的…

SQL開發的智能助手:通義靈碼在IntelliJ IDEA中的應用

SQL 是一種至關重要的數據庫操作語言&#xff0c;盡管其語法與通用編程語言有所不同&#xff0c;但因其在眾多應用中的廣泛使用&#xff0c;大多數程序員都具備一定的 SQL 編寫能力。然而&#xff0c;當面對復雜的 SQL 語句或優化需求時&#xff0c;往往需要專業數據庫開發工程…

算法——分支限界

學習目標&#xff1a; 掌握算法入門知識 學習內容&#xff1a; 分支限界的定義例題詳細步驟講解&#xff08;找牛&#xff09; 1. 分支限界的定義 分支限界法是一種用于求解 組合優化問題 的算法框架&#xff0c;通過 系統性地搜索解空間樹&#xff0c;并結合 剪枝策略 來避…

對接日本金融市場數據全指南:K線、實時行情與IPO新股

一、日本金融市場特色與數據價值 日本作為全球第三大經濟體&#xff0c;其金融市場具有以下顯著特點&#xff1a; 成熟穩定&#xff1a;日經225指數包含日本頂級藍籌股獨特交易時段&#xff1a;上午9:00-11:30&#xff0c;下午12:30-15:00&#xff08;JST&#xff09;高流動性…