silverlight应用:使用Silverlight构建插件式应用程序( 4)

  www.cuface.cn/.html   构建第 2个插件:使用Silverlight构建插件式应用<img src='/icons/90897chengxu.gif' />( 4)

  我要构建第 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



Tags:  silverlight.2.0 silverlight是什么 silverlight silverlight应用

延伸阅读

最新评论

发表评论