DataTriggers基于WPF中的列名及其值

时间:2016-06-16 08:18:15

标签: c# wpf

我有<script src="https://ajax.googleapis.com/ajax/libs/threejs/r76/three.min.js"></script> <header> <style> body canvas{ width: 100%, height: 100%; margin:0; padding:0; } </style> </header> <body> </body> <script> var renderer, camera, scene, controls, box, path, speed = 0, path_progress = 0, axis = new THREE.Vector3(), tangent = new THREE.Vector3(), up = new THREE.Vector3(1, 0, 0); function initRenderer(){ renderer = new THREE.WebGLRenderer({antialias:true}); renderer.setSize( window.innerWidth, window.innerHeight); document.body.appendChild(renderer.domElement); renderer.setClearColor(0x264d73, 1); } function initScene(){ scene = new THREE.Scene(); } function initCamera(){ camera = new THREE.PerspectiveCamera(45, window.innerWidth/window.innerHeight, 1, 10000); camera.position.set(0, 40, 40); camera.lookAt(scene.position); scene.add(camera); //controls = new THREE.OrbitControls( camera , renderer.domElement ); } function initLights(){ var aLight = new THREE.AmbientLight(0xD0D0D0, 0.5); scene.add(aLight); } ////// Initializers //////////////////////// function add_path(){ path = new THREE.CatmullRomCurve3( [ new THREE.Vector3( 3.4000015258789062, 0, 3.4000015258789062 ), new THREE.Vector3( 10.600006103515625, 0, 3.4000015258789062 ), new THREE.Vector3( 10.600006103515625, 0, 10.600006103515625 ), new THREE.Vector3( 3.4000015258789062, 0, 10.600006103515625 ) ]); path.closed = true; speed = 0.4 / path.getLength(); var material = new THREE.LineBasicMaterial({ color: 0xff00f0, }); var geometry = new THREE.Geometry(); var splinePoints = path.getPoints(20); for (var i = 0; i < splinePoints.length; i++) { geometry.vertices.push(splinePoints[i]); } var line = new THREE.Line(geometry, material); scene.add(line); add_box(splinePoints[0]); } function add_box( pos ){ var geometry = new THREE.BoxGeometry( 1, 1, 1 ); var materials = [ new THREE.MeshBasicMaterial({ color: 0x80bfff, }), new THREE.MeshLambertMaterial({ color: 0x80bfff }), new THREE.MeshLambertMaterial({ color: 0x001a33 }), new THREE.MeshLambertMaterial({ color: 0x80bfff }), new THREE.MeshLambertMaterial({ color: 0x80bfff }), new THREE.MeshLambertMaterial( { color: 0x80bfff }) ]; var material = new THREE.MeshFaceMaterial( materials ); box = new THREE.Mesh( geometry, material ); box.scale.set( 1, 1, 1 ); box.position.copy( pos ); //// x,y,z //// box.rotation.set( 0 , 0 , 0 ); scene.add( box ); camera.position.copy( box.position ) camera.position.x += 20; camera.position.y += 10; camera.lookAt(box.position); setInterval( function(){ follow_path(); }, 100); } function follow_path(){ if( path !== null ){ if ( path_progress <= 1) { camera.lookAt(box.position); var pos = this.path.getPointAt( this.path_progress ); box.position.copy( pos ); tangent = this.path.getTangentAt( this.path_progress ).normalize(); axis.crossVectors( this.up, this.tangent).normalize(); var radians = Math.acos( this.up.dot(this.tangent) ); box.quaternion.setFromAxisAngle( this.axis, radians ); path_progress += speed; }else{ path_progress = 0; } } } ///// Mouse events //////// ///// Main ///////// function main(){ //console.log(" Initializing: "); initRenderer(window.innerWidth, window.innerHeight ); initScene(); initCamera(window.innerWidth, window.innerHeight ); initLights(); add_path(); animate(); } function animate(){ window.requestAnimationFrame( animate ); render_all(); } function render_all(){ renderer.render(scene, camera); } main(); </script>自动生成代码为DataGrid的列。 如果列X的值为DataTable或其他任何值,我需要更改行的背景颜色。 我可以使用FALSE eventargs吗? 如果不能如何使用AutoGeneratingColumn="OnAutoGeneratingColumn"访问列值并影响行的背景颜色来更改行的样式?

编辑1: 直截了当的问题:如何根据某列上的值更改行的背景颜色?

编辑2: 基于生成列事件我可以这样做:

编辑3:编码

DataTriggers

所以我改变了一个列(它的单元格)的背景颜色,但我想要检查每一行的值,如果值为X则为红色,如果为值Y则为绿色。

1 个答案:

答案 0 :(得分:3)

Style使用DataTriggerDataGrid。然后根据绑定的数据项进行格式化。

<DataGrid.RowStyle>
    <Style TargetType="{x:Type DataGridRow}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=<!--Your property name here-->}" 
                         Value="False">
                 <Setter Property="Background" Value="<!-- Your desired Brush here-->" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
</DataGrid.RowStyle>

如果要访问绑定数据项的默认索引器属性,请设置路径Path=[IndexerName]Path=[(sys:Int32)0]