我要构建第 2个插件是用来显示用户关系图形显示界面如下:
其中中心是登陆当前用户 3个人使用户组别最边上图标是组别下用户用户每个节点都可以移动
构建数据库:用户表用户关系表(参见数据库结构)
1. 新建立个SilverLight类库项目名字叫 WindCloud.PlugIn.Users;
2. 删除掉默认Class1.cs项目
3. 添加对公共项目 WindCloud.PubUnit引用;
4. 添加对公共项目 WindCloud.PlugIn引用;
5. 新建个目录Controls
a) 添加个类文件UserLine描述连线信息
public UserLine
{
public LineName { ; get; }
public NodeStart { ; get; }
public NodeEnd { ; get; }
public Line NodeLine { ; get; }
}
b) 添加个用户Control控件UserNode描述每个节点:
public NodeName
{
{
this.nodeText.Text = value;
}
get
{
this.nodeText.Text;
}
}
public Po NodePo { ; get; }
public ImageSource NodeImg
{
{
this.nodeImg.Source = value;
}
get
{
this.nodeImg.Source;
}
}
界面文件如下:
<Grid x:Name="LayoutRoot" Background="Transparent">
<StackPanel HorizontalAlignment="Center">
<Image x:Name="nodeImg" />
<TextBlock x:Name="nodeText" Text="FriendName" FontSize="12" ></TextBlock>
</StackPanel>
</Grid>
下面从数据库获取数据形成图形:
1. 建立两个对象保存节点个数和节点的间连线:
Dictionary<, UserNode> userNodes = Dictionary<, UserNode>;
Dictionary<, UserLine> userLines = Dictionary<, UserLine>;
2. 使用WCF从数据库获取数据获取指定用户人际关系数据:
WSMainClient ws = WSMainClient( .ServiceModel.BasicHttpBinding, .ServiceModel.EndpoAddress(serviceUri));
ws.GetFriendsCompleted EventHandler<GetFriendsCompletedEventArgs>(ws_GetFriendsCompleted);
ws.GetFriendsAsync("song");
3. 根据数据构建人际关系图形:
//添加用户节点
foreach (UserRelaInfo ri in userRelaInfo)
{
nodeLocal = ri.LocalStyle.Split(',');
CreateUserNode(ri, Po(Convert.ToInt32(nodeLocal[0]), Convert.ToInt32(nodeLocal[1])));
}
//选择所有用户组信息
var colltions = from uri in userRelaInfo where uri.RelaType "colltion" orderby uri.RelationId select uri;
foreach (UserRelaInfo ri in colltions)
{
//添加用户和组的间连线
CreateUserLine(ri.RelationId., "song", ri.FriendName);
//添加每个组和朋友的间连线
var userCollection = from uc in userRelaInfo where uc.Relation ri.FriendName orderby uc.RelationId select uc;
foreach (UserRelaInfo tmpri in userCollection)
{
//添加用户和组的间连线
CreateUserLine(tmpri.RelationId., ri.FriendName, tmpri.FriendName);
}
}
4. 把用户节点和连线添加到界面上:
foreach (KeyValuePair<, UserLine> kvp in userLines)
{
this.RelationMap.Children.Add(kvp.Value.NodeLine);
}
foreach (KeyValuePair<, UserNode> kvp in userNodes)
{
this.RelationMap.Children.Add(kvp.Value);
App.WriteDebug(kvp.Value.nodeText.Text);
}
5. 用户拖动位置的后保存新位置到数据库:
public void SaveLocalStyle( userRelationId, localStyle)
{
//用户拖动位置的后保存节点位置
Uri uri = .Windows.Browser.HtmlPage.Document.DocumentUri;
host = uri.AbsoluteUri;
host = host.Sub(0, host.Length - uri.LocalPath.Length);
servicePath = "/Services/WSMain.svc";
serviceUri = host + servicePath;
WSMainClient ws = WSMainClient( .ServiceModel.BasicHttpBinding, .ServiceModel.EndpoAddress(serviceUri));
ws.UpDateLocalStyleCompleted (o, ev) =>
{
};
ws.UpDateLocalStyleAsync(userRelationId, localStyle);
}
至此整个插件主体部分全部构建完成
演示地址:www.cuface.cn/.html
最新评论