首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > CAD教程 >

SL中怎么判断控件内的某点坐标的颜色? 比如小弟我的Grid, 小弟我想知道在0,0是什么颜色, 0,1是什么颜色

2012-03-06 
SL中如何判断控件内的某点坐标的颜色? 比如我的Grid, 我想知道在0,0是什么颜色, 0,1是什么颜色?如题。我现

SL中如何判断控件内的某点坐标的颜色? 比如我的Grid, 我想知道在0,0是什么颜色, 0,1是什么颜色?
如题。
我现在想在 Grid控件的格子上画个字, 

但不知道哪个格子上有字的一部分, 比如我的grid的背景是黑色, 字是红色, 我想知道grid内的每个cell的颜色 是黑色 还是红色?

[解决办法]

C# code
if (cell.Background == new SolidColorBrush(Colors.Red)) { };
[解决办法]
Grid只是用来支持LayOut用的,他本身并不是一个逻辑划分Child的Control。

所以,我的建议是遍历Grid的Children。然后检查每个Children的Grid.Row和Grid.Column。找到匹配的Control后,进行Brush比较。

另外,1楼的回答请慎重考虑。我怎么觉得
new SolidColorBrush(Colors.Red)==new SolidColorBrush(Colors.Red);这样的Code肯定会返回false呢?
SolidColorBrush可是Class啊,Object比较不能用==吧。

[解决办法]
Grid控制Cell比较麻烦,尽管实现效率也不高。可以考虑使用自定义控件控制,或者使用datagrid控件。

相对来说,控制Grid的Row比较容易,你可以参考下面的代码,设置Grid的Row背景。

C# code
 private List<DataGridRow> _myDataGridRows = new List<DataGridRow>();        void myDataGrid_LoadingRow(object sender, DataGridRowEventArgs e)        {            _myDataGridRows.Add(e.Row);        }        void myDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)        {            this.ResetRowsColor();            var possibleSelection = _myDataGridRows.Where(w => w.GetIndex() == myDataGrid.SelectedIndex - 1 || w.GetIndex() == myDataGrid.SelectedIndex + 2)                  .ToList();            if (possibleSelection.Count == 2)            {                this.SetRowColor(possibleSelection.ElementAt(0), Colors.Red);                this.SetRowColor(possibleSelection.ElementAt(1), Colors.Blue);            }            else if (possibleSelection.Count == 1)            {                if (possibleSelection.ElementAt(0).GetIndex() < myDataGrid.SelectedIndex)                {                    this.SetRowColor(possibleSelection.ElementAt(0), Colors.Red);                }                else                {                    this.SetRowColor(possibleSelection.ElementAt(0), Colors.Blue);                }            }        }        public void ResetRowsColor()        {            foreach (var row in this._myDataGridRows)            {                this.SetRowColor(row, Colors.Transparent);            }        }        private void SetRowColor(DataGridRow row, Color color)        {            Grid rootGrid = MyVisualTreeHelper.SearchFrameworkElement(row, "Root") as Grid;            if (rootGrid != null)            {                rootGrid.Background = new SolidColorBrush(color);            }        }        public FrameworkElement SearchFrameworkElement(FrameworkElement parentFrameworkElement, string childFrameworkElementNameToSearch)        {            FrameworkElement childFrameworkElementFound = null;            SearchFrameworkElement(parentFrameworkElement, ref childFrameworkElementFound, childFrameworkElementNameToSearch);            return childFrameworkElementFound;        }        private void SearchFrameworkElement(FrameworkElement parentFrameworkElement, ref FrameworkElement childFrameworkElementToFind, string childFrameworkElementName)        {            int childrenCount = VisualTreeHelper.GetChildrenCount(parentFrameworkElement);            if (childrenCount > 0)            {                FrameworkElement childFrameworkElement = null;                for (int i = 0; i < childrenCount; i++)                {                    childFrameworkElement = (FrameworkElement)VisualTreeHelper.GetChild(parentFrameworkElement, i);                    if (childFrameworkElement != null && childFrameworkElement.Name.Equals(childFrameworkElementName))                    {                        childFrameworkElementToFind = childFrameworkElement;                        return;                    }                    SearchFrameworkElement(childFrameworkElement, ref childFrameworkElementToFind, childFrameworkElementName);                }            }        } 

热点排行